SPFA模板

来源:互联网 发布:美国非农数据公布时间一览表 编辑:程序博客网 时间:2024/06/06 07:50

洛谷2951

#include<iostream>#include<cstdio>using namespace std;int n,m,d[200001],x,y,edge,head[500001],maxn,biaohao,sum;struct node{int to,cost,nxt;}a[500001];int team[1000001],hed,tail;bool v[500001];void add(int x,int y){    edge++;    a[edge].to=y;    a[edge].nxt=head[x];    a[edge].cost=1;    head[x]=edge;}void spfa(int x){    while(hed<=tail)    {        v[team[hed]]=0;hed++;        for(int i=head[team[hed-1]];i;i=a[i].nxt)        {            int t=a[i].to;            if(d[t]>d[team[hed-1]]+1)            {                d[t]=d[team[hed-1]]+1;                if(!v[t])                {                    v[t]=1;                    team[++tail]=t;                }            }        }    }}int main(){    cin>>n>>m;    for(int i=1;i<=m;i++)    {        scanf("%d%d",&x,&y);        add(x,y);        add(y,x);    }    for(int i=1;i<=n;i++)    {        d[i]=2e9;    }    d[1]=0;    hed=tail=1;    team[1]=1;    spfa(1);    for(int i=1;i<=n;i++)    {        if(d[i]>maxn)         maxn=d[i];    }    for(int i=1;i<=n;i++)    {        if(d[i]==maxn)        {            biaohao=i;            break;          }    }    for(int i=1;i<=n;i++)    {        if(d[i]==maxn)        {            sum++;        }    }    printf("%d %d %d",biaohao,maxn,sum);} 

dalao的博客