标签:des style blog http color strong 文件 数据
1 判断成环的时候,只要判断输入边的两个点。有一个共同的父节点,那么这两个点就成环。
2 判断连通的时候,只要判断根节点数为1即可。
3 当输入的这组数据只有 0 0 时,依然是满足条件的,即应输出 "Yes"。
1 #include<stdio.h> 2 #include<string.h> 3 #define maxn 100000 4 5 int pre[maxn], vis[maxn]; 6 int _max, _min; 7 8 int _find(int x) 9 { 10 if (x == pre[x]) 11 return pre[x]; 12 else 13 return _find(pre[x]); 14 } 15 16 int main() 17 { 18 int a, b, i, sign; 19 while(scanf("%d%d",&a,&b),a!=-1||b!=-1){ 20 if(a==0 && b==0){ 21 printf("Yes\n"); 22 continue; 23 } 24 memset(vis,0,sizeof(vis)); 25 if(a>b){ 26 _min=b; _max=a; 27 } 28 else{ 29 _min=a; _max=b; 30 } 31 vis[a] = vis[b] = 1; 32 for(i = 1; i<=maxn; i++) 33 pre[i] = i; 34 35 sign=0; 36 pre[_find(a)] = _find(b); 37 while(scanf("%d%d", &a, &b), a || b){ 38 vis[a] = vis[b] = 1; 39 if(a > _max) _max=a; 40 else if(a < _min) _min=a; 41 if(b > _max) _max=b; 42 else if(b < _min) _min=b; 43 44 if(_find(a) == _find(b)) 45 sign = 1; 46 else 47 pre[_find(a)] = _find(b); 48 } 49 if(sign){ 50 printf("No\n"); 51 continue; 52 } 53 for(i = _min; i <= _max; i++){ 54 if(vis[i] && pre[i]==i) 55 sign++; 56 } 57 if(sign)//如果有多个根节点的话,不连通,也不行 58 printf("Yes\n"); 59 else 60 printf("No\n"); 61 } 62 return 0; 63 }
标签:des style blog http color strong 文件 数据
原文地址:http://www.cnblogs.com/zzy9669/p/3874837.html