HDU 1272
来源:互联网 发布:dock软件iphone6s 编辑:程序博客网 时间:2024/06/01 07:45
并查集的应用注意是“有且仅有”就要保证最终只有一个集合,且每个点都只有一条路。
#include<stdio.h>int father[100005],depth[100005];int a[200005];void init(){ int i; for(i = 1; i < 100005;i ++) { father[i] = i; depth[i] = 0; }}int find(int x){ if(x==father[x]) return x; else return father[x] = find(father[x]);}void unit(int x,int y){ x = find(x); y = find(y); if(x==y) return ; if(depth[x]<depth[y]) { father[x] = y; } else { if(depth[x]>depth[y]) father[y] = x; else { father[x] = y; depth[y]++; } }}int main(){ int i,j,k = 1,flag,con,temp = -1; while(~scanf("%d%d",&a[k],&a[k+1])&&(a[k]!=-1||a[k+1]!=-1)) { con = 0; if(a[k]==0&&a[k+1]==0) { printf("Yes\n"); continue ; } flag = 0; init(); unit(a[k],a[k+1]); k += 2; while(~scanf("%d%d",&a[k],&a[k+1])&&(a[k]||a[k+1])) { if(find(a[k])==find(a[k+1])) //判断是否只有一条路,做到“有”。 flag = 1; else unit(a[k],a[k+1]); k += 2; } for(j = 1;j < k;j ++) { if(a[j]==find(a[j])&&(temp!=a[j])) //判断是否只有一个集合,做到”仅有“。 { con++; temp = a[j]; } if(con==2) break ; } if(k==3&&(a[1]==a[2])) flag = 1; if(!flag&&(con==1)) printf("Yes\n"); else printf("No\n"); k = 1; temp = -1; } return 0;}
0 0
- HDU 1272
- HDU 1272
- hdu 1272
- hdu 1272
- hdu 1272
- hdu 1272
- hdu 1272
- hdu 1272
- HDU 1272
- HDU 1272
- hdu-1272
- HDU 1272
- HDU 1272
- HDU 1272
- hdu 1272
- HDU 1272
- HDU-1272
- HDU 1272
- android apk打包签名机制
- Windows 下 gpedit.msc services.msc 扩展选项卡空白
- [五一特别礼物] 最强的反编译 ida Pro 6.5 Demo Plus来了
- 学习zigbee入门-7
- HDU 1232
- HDU 1272
- HDU 1002
- hostapd--内部结构分析
- HDU 1013
- HDU 1004
- 学习zigbee入门-8
- HDU 1213
- 初学acm感想
- HEU acm 1003