1659: Graph Center

#include<stdio.h> #include<queue> #include<string.h> using namespace std;const int MAXN = 105; const int MAXM = 100005; const int INF = 1<<30; struct EDG{int to,next; }edg[MAXM]; int eid,head[MAXN];void init(){eid=0;memset(head,-1,sizeof(head)); } void addEdg(int u,int v){edg[eid].to=v; edg[eid].next=head[u]; head[u]=eid++;edg[eid].to=u; edg[eid].next=head[v]; head[v]=eid++; } int spfa(int s,int n){queue<int>q;bool inq[MAXN]={0};int d[MAXN];for(int i=1; i<=n; i++)d[i]=INF;d[s]=0;q.push(s);while(!q.empty()){int u=q.front(); q.pop();inq[s]=0;for(int i=head[u]; i!=-1; i=edg[i].next){int v=edg[i].to;if(d[v]>d[u]+1){d[v]=d[u]+1;if(!inq[v])q.push(v),inq[v]=1;}}}int maxt=0;for(int i=1; i<=n; i++)if(maxt<d[i])maxt=d[i];return maxt; } int main(){int T,n,m,u,v,d[MAXN],id[MAXN];scanf("%d",&T);while(T–){scanf("%d%d",&n,&m);init();while(m–){scanf("%d%d",&u,&v);addEdg(u,v);}int mint=INF;for(int i=1;i<=n;i++){d[i]=spfa(i,n);if(d[i]<mint)mint=d[i];}int k=0;for(int i=1; i<=n; i++)if(mint==d[i]){id[k++]=i;}printf("%d\n",k);for(int i=0; i<k; i++){printf("%d",id[i]);if(i!=k-1)printf(" ");elseprintf("\n");}} }/**************************************************************Problem: 1659User: aking2015Language: C++Result: AcceptedTime:256 msMemory:1848 kb ****************************************************************/

,学做任何事得按部就班,急不得

1659: Graph Center

相关文章:

你感兴趣的文章:

标签云: