HDU 5876 2016网预 大连
2016-09-11 18:15
253 查看
2016 ACM/ICPC Asia Regional Dalian Online
HDU 5876 Sparse Graph
补图最短路,BFS
传送门:HDU题意
给你个稀疏图,再给你一源点,求在他的补图中,源点到各点的最短路。注意是无权图。思路
无权图其实BFS是很快的。因为最先被BFS访问的点一定是访问的最短路。所以每个点BFS一次过后以后就不用管了。再加一个sum变量,访问过的点数。到n了,直接break就行了。至于补图,也没想的那么复杂。用个set存,感觉set就是自动排序的vector,所以查什么的都是log。哪条边有,就存到set里面,BFS时如果set里面没有这个边,就说明补图里面有这条边,把点加入队列。
最后如果某个点的d值是无穷大,那么这个点就是不可到点,BFS也没访问过。输出-1就行了。
代码
注意sum变量,不加必T#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <string> #include <cmath> #include <cstdlib> #include <stack> using namespace std; const int MAXN=200007; const int oo=0x3f3f3f3f; typedef long long LL; set<int> S[MAXN]; int d[MAXN]; void BFS(int n,int m,int s) { memset(d,0x3f,sizeof(d)); int sum=0; queue<int> Q; Q.push(s); d[s]=0; sum++; while(!Q.empty()) { int tx=Q.front();Q.pop(); for(int i=1;i<=n;i++) { if(d[i]!=oo) continue; if(!S[tx].count(i)) { Q.push(i); d[i]=d[tx]+1; sum++; } if(sum==n) break; } if(sum==n) break; } return; } int main() { int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); for(int i=0;i<=n;i++) S[i].clear(); for(int i=0;i<m;i++) { int a,b; scanf("%d%d",&a,&b); if(!S[a].count(b)) S[a].insert(b); if(!S[b].count(a)) S[b].insert(a); } int s; scanf("%d",&s); BFS(n,m,s); int last; if(s==n) last=n-1; else last=n; for(int i=1;i<=n;i++) if(i!=s) if(d[i]==oo) printf("-1%c",i==last ? '\n' : ' '); else printf("%d%c",d[i],i==last ? '\n' : ' '); } return 0; }
相关文章推荐
- hdu 5876 - Sparse Graph(2016大连网络赛) bfs
- 2016 大连网络赛 hdu 5876 ACM ICPC(补图求最短路)
- 2016 ICPC 大连网络赛 HDU 5876 Sparse Graph
- 【2016-大连赛区网络赛-I】补图最短路(Sparse Graph,hdu 5876)
- hdu 5972 Regular Number (bitset优化匹配) 2016大连现场赛
- 【2016-大连赛区网络赛-H】优化(Function,hdu 5875)
- HDU 5876 2016 ACM/ICPC Asia Regional Dalian Online BFS+set
- hdu 5869 Different GCD Subarray Query 2016ACM/ICPC大连赛区网络赛1006
- HDU 5980 && 2016ICPC大连 J: Find Small A
- HDU 5974 && 2016ICPC大连 D: A Simple Math Problem
- HDU 5876 Sparse Graph (补图BFS) 2016 ACM/ICPC Asia Regional Dalian Online
- 【2016-大连赛区网络赛-G】(Friends and Enemies,hdu 5874)
- 2016 大连网络赛 hdu 5869 Different GCD Subarray Query(gcd+树状数组)★ ★
- HDU 5875 Function -2016 ICPC 大连赛区网络赛
- HDU 5874 2016网预 大连
- HDU 5875 Function 2016亚洲区域赛大连网络赛
- HDU 5872 Seats 2016大连网赛
- hdu 5877 离散化+树状数组 (2016大连网赛)
- 2016 ICPC 大连网络赛 HDU 5869 Different GCD Subarray Query
- HDU 5981 && 2016ICPC大连 K: Guess the number(推理)