hdu 1325 Is It A Tree? 并查集
来源:互联网 发布:零售行业有哪些数据 编辑:程序博客网 时间:2024/06/06 08:31
题目:点击打开链接
思路:利用并查集 判断给出的是否为一棵树。两个数组,vis[],father[],
利用vis[]判断是否出现过 ,(1)i出现过并且father[i]!=i时就能说明i的入度>1,不满足树的要求了;(2)根节点的个数如果>1也说明不是棵树 只要判断这两点就好。
code:
#include<iostream>#include<algorithm>#include<stdio.h>using namespace std;const int N=100000;int father[N],flag;int vis[N];void init(){ for(int i=0;i<100000;i++) { father[i]=i; vis[i]=0; } flag=0;}int findd(int n){ if(n!=father[n]) return findd(father[n]); return father[n];}int main(){ // freopen("i.txt","r",stdin); int i,j,tt=0,a,b; init(); while(scanf("%d%d",&a,&b)!=EOF&&a>=0&& b>=0) { if(flag==1 && a!=0 && b!=0) continue; if(a==0 && b==0) { int sum=0; for(i=0;i<100000;i++) { if(i==findd(i) && vis[i])//判断根节点的个数 sum++; } if(sum>1) flag=1; tt++; if(!flag) printf("Case %d is a tree.\n",tt); else printf("Case %d is not a tree.\n",tt); init(); continue; } if(b!=father[b])//相当于判断入度,当i!=father[i]时 它的入度就>=1了; flag=1; else { int aa=findd(a); father[b]=aa; vis[a]=vis[b]=1; } } return 0;}
0 0
- HDU 1325 Is It A Tree?(并查集)
- hdu 1325 Is It A Tree?(并查集)
- HDU 1325 Is It A Tree? (并查集)
- 【并查集】HDU 1325 Is It A Tree?
- 【并查集】HDU 1325 Is It A Tree?
- HDU 1325 Is It A Tree? 并查集
- hdu 1325 Is It A Tree? 并查集
- HDU 1325 Is It A Tree?(并查集)
- hdu 1325 Is It A Tree?【并查集】
- HDU Problem 1325 Is It A Tree?【并查集】
- 【HDU】-1325-Is It A Tree?(并查集)
- hdu 1325 Is It A Tree?(并查集)
- hdu 1325 Is It A Tree? (并查集)
- hdu 1325 Is It A Tree? (并查集)
- hdu 1325 Is It A Tree? (并查集)
- Is It A Tree? HDU 1325 并查集
- 【并查集】hdu 1325 Is It A Tree? 或 poj 1308 Is It A Tree?
- 【并查集】Is it a tree?
- HDU 1009 FatMouse' Trade
- UINavigationController 的使用
- 哈希表
- android的DialogFragment设置全屏之后,里面的View不能充满整个屏幕
- 交换机端口untaged、taged、trunk、access 的区别
- hdu 1325 Is It A Tree? 并查集
- rpc编程常见问题
- 详解JMeter正则表达式
- 写给初学者的6条网页设计安全配色指南
- Storm安装介绍
- java_集合框架基础总结
- HDU 1257 最少拦截系统
- 缓存技术PK:选择Memcached还是Redis?
- 【转】计算机视觉基础2——相机成像的几何描述