hdu 小希的迷宫

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272

思路:用并查集来判断是否都在一个集合里面,是否成环   (ps:今天头好晕...)  

代码:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 #include <limits.h> 
 5 #include <algorithm>
 6 #include <iostream>
 7 #include <ctype.h>
 8 #include <iomanip>
 9 #include <queue>
10 #include <map>
11 #include <stdlib.h>
12 using namespace std;
13 
14 int f[100010],mark[100010];
15 
16 int find(int x)
17 {
18     if(x==f[x])
19         return f[x];
20     f[x]=find(f[x]);
21     return f[x];
22 }
23 
24 bool Union(int x,int y)
25 {
26     int a=find(x);
27     int b=find(y);
28     if(a!=b){
29         f[a]=b;
30         return true;
31     }
32     return false;
33 }
34 
35 int main()
36 {
37     int a,b,i,p,count;
38     while(scanf("%d%d",&a,&b)&&(a!=-1&&b!=-1)){
39         count=0,p=1;
40         if(a==0&&b==0){
41             printf("Yes
");
42             continue;
43         }
44         for(i=0;i<100010;i++){
45             f[i]=i;mark[i]=0;
46         }
47         while(a||b){
48             mark[a]=1,mark[b]=1;
49             if(Union(a,b)==false)
50                 p=0;
51             scanf("%d%d",&a,&b);
52         }
53         if(p==0)
54             printf("No
");
55         else{
56             for(i=0;i<100010;i++)
57                 if(mark[i]&&f[i]==i)
58                     count++;
59                 if(count==1)
60                     printf("Yes
");
61                 else
62                     printf("No
");
63         }
64     }
65 }
原文地址:https://www.cnblogs.com/wangmengmeng/p/4951189.html