HDU1272
Posted Blogggggg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU1272相关的知识,希望对你有一定的参考价值。
题目链接:https://vjudge.net/problem/HDU-1272
题目分析:以前做过的一道并查集,今天翻到了就重新做一次。
注意点:1、当输入只有“ 0 0"时输出”Yes";
2、"有且仅有一条路径可以相通","有且仅有一条路径可以相通","有且仅有一条路径可以相通","有且仅有一条路径可以相通","有且仅有一条路径可以相通","有且仅有一条路径可以相通"......
3、输出是“Yes"和”No“不是”YES"和“NO”,输出是“Yes"和”No“不是”YES"和“NO”,输出是“Yes"和”No“不是”YES"和“NO”,输出是“Yes"和”No“不是”YES"和“NO”......
1 #include <cstdio> 2 #include <algorithm> 3 #include <set> 4 using namespace std; 5 const int maxn=100000+10; 6 int source[maxn]; 7 set<int>vis; 8 int node[maxn]; 9 int finds(int t){ 10 if(!source[t]) 11 return t; 12 source[t]=finds(source[t]); 13 return source[t]; 14 } 15 int main() 16 { 17 int a,b; 18 int yes; 19 while(scanf("%d%d",&a,&b)==2 && a>=0 && b>=0){ 20 if(!a || !b){ 21 printf("Yes\n"); 22 continue; 23 } 24 vis.insert(a); 25 vis.insert(b); 26 for(int i=1;i<maxn;i++){ 27 source[i]=0; 28 node[i]=1; 29 } 30 yes=1; 31 source[a]=b; 32 node[b]+=node[a]; 33 int maxx=node[b]; 34 35 while(scanf("%d%d",&a,&b)==2 && a){ 36 vis.insert(a); 37 vis.insert(b); 38 if(!yes) 39 continue; 40 int s1=finds(a); 41 int s2=finds(b); 42 if(s1==s2){ 43 yes=0; 44 continue; 45 } 46 source[s1]=s2; 47 node[s2]+=node[s1]; 48 maxx=max(node[s2],maxx); 49 } 50 if(yes && maxx==vis.size()) printf("Yes\n"); 51 else printf("No\n"); 52 vis.clear(); 53 } 54 return 0; 55 }
以上是关于HDU1272的主要内容,如果未能解决你的问题,请参考以下文章