标签:
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
#include<bits/stdc++.h> using namespace std; #define ll long long #define pi (4*atan(1.0)) const int N=1e5+10,M=4e6+10,inf=1e9+10,mod=1e9+7; const ll INF=1e18+10; vector<int>v[N<<1]; queue<int>q; set<int>s; int flag[N<<1]; int ans[N<<1]; void init(int n) { s.clear(); for(int i=1;i<=n;i++) v[i].clear(),flag[i]=1,ans[i]=0; while(!q.empty())q.pop(); } int main() { int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); init(n); for(int i=0;i<m;i++) { int u,w; scanf("%d%d",&u,&w); v[u].push_back(w); v[w].push_back(u); } int st; scanf("%d",&st); q.push(st); for(int i=1;i<=n;i++)if(i!=st)s.insert(i); flag[st]=0,ans[st]=0; while(!q.empty()) { int u=q.front(); q.pop(); for(int i=0;i<v[u].size();i++) flag[v[u][i]]=0; for(set<int>::iterator itt,it=s.begin();it!=s.end();) { if(flag[*it]) { q.push(*it); ans[*it]=ans[u]+1; itt=it; it++; s.erase(itt); } else it++; } for(set<int>::iterator it=s.begin();it!=s.end();it++)flag[*it]=1; } int flag=0; for(int i=1;i<=n;i++) { if(i==st) continue; printf("%d%c",ans[i],(flag++>=(n-2)?‘\n‘:‘ ‘)); } } return 0; }
hdu 5876 Sparse Graph 无权图bfs求最短路
标签:
原文地址:http://www.cnblogs.com/jhz033/p/5910649.html