并查集 HDU1272

 1 #include <iostream>
 2 #include <map>
 3 #include <cstring>
 4 #include <cstdio>
 5 
 6 using namespace std;
 7 
 8 int father[100010];
 9 int num[100010];
10 
11 int main()
12 {
13     int a,b;
14     while(true)
15     {
16         int flag=1;
17         int time=1;
18         for(int i=1;i<=100000;i++)
19             father[i]=i;
20         for(int i=1;i<=100000;i++)
21             num[i]=1;
22         while(cin>>a>>b)
23         {
24             if(a==0&&b==0)
25                 break;
26             if(a==-1&&b==-1)
27                 goto F1;
28             time++;
29             int fa=a;
30             int fb=b;
31             while(fa!=father[fa])
32             {
33                 fa=father[fa];
34             }
35             while(fb!=father[fb])
36             {
37                 fb=father[fb];
38             }
39             int t1=a;
40             while(t1!=fa)
41             {
42                 int tmp=father[t1];
43                 father[t1]=fa;
44                 t1=tmp;
45             }
46             int t2=b;
47             while(t2!=fb)
48             {
49                 int tmp=father[t2];
50                 father[t2]=fb;
51                 t2=tmp;
52             }
53             if(fa==fb)
54                 flag=0;
55             else
56             {
57                 father[fb]=fa;
58                 num[fa]+=num[fb];
59                 num[fb]=0;
60             }
61         }
62         if(flag)
63         {
64             flag=0;
65             for(int i=1;i<=100000;i++)
66             {
67                 if(num[i]==time)
68                 {
69                     flag=1;
70                 }
71             }
72         }
73         if(flag)
74             cout<<"Yes"<<endl;
75         else
76             cout<<"No"<<endl;
77     }
78     F1:
79     return 0;
80 }
View Code
原文地址:https://www.cnblogs.com/wsruning/p/4718819.html