hdu1325Is It A Tree?
来源:互联网 发布:休闲食品数据 编辑:程序博客网 时间:2024/05/16 07:40
并查集的运用,不过有一些变化
首先必须弄清楚构成树的条件:
1、无环,在这里,可直接用并查集判断。
2、连通,也就是最后只有一个连通分量。
3、除了根结点,每个点有且仅有一个父结点。这个条件我一开始忽略了。。
#include<cstdio>#include<cstring>using namespace std;const int MAX =100005;int last[MAX];char have[MAX];void make(){ for(int i=1;i<=MAX;i++){ last[i]=i,have[i]=0; }}int find(int x){ int p=x,t; while(p!=last[p])p=last[p]; while(x!=p){ t=last[x],last[x]=p,x=t; } return p;}void un(int a,int b){ last[a]=b;}int main(){ int a,b,aa,bb,cases=1,ok=1,all=0,node,edge=0; make(); while(1){ scanf("%d %d",&a,&b); all++; if(a==0&&a==b){ if(all==1){ printf("Case %d is a tree.\n",cases++); all=0; continue; } if(ok){ node=0; for(int i=1;i<=MAX;i++) if(have[i]) node++; if(node-1!=edge) ok=0; } if(ok) printf("Case %d is a tree.\n",cases++); else printf("Case %d is not a tree.\n",cases++); ok=1,edge=0,make(),all=0; continue; } if(a<0&&b<0) break; if(ok){ have[a]=a,have[b]=1; aa=find(a),bb=find(b); if(bb!=b){ ok=0; continue; } if(aa!=bb){ un(bb,aa); edge++; } else ok=0; } }}
0 0
- hdu1325Is It A Tree?
- hdu1325Is It A Tree?
- HDU1325Is It A Tree?
- hdu1325Is It A Tree?【并差集】
- hdu1325Is It A Tree?(并查集)
- hdu1325is it a tree?&&poj1308 is it a tree?(并查集)
- hdu1325Is It A Tree?——基础并查集(考思路)
- Is It A Tree?
- Is it a tree?
- poj1308Is It A Tree
- poj1308Is It A Tree?
- BIT1060Is It A Tree?
- Is It A Tree?
- Is It A Tree?
- Is It A Tree?
- Is It A Tree?
- Is It A Tree?
- Is It A Tree?
- 压缩感知应用——单像素相机
- jedis 操作redis (java 缓存机制)
- 蛇形填数
- http状态大全
- [C++]第二章:基本编程语句
- hdu1325Is It A Tree?
- uvm_info信息定制
- nginx源码分析--请求体的读取(2)
- QwtPlotLayout解读---from Qwt-6.1.1
- 我是没得事
- Windows下Git bash乱码问题
- 四数之和为target特定值的序列
- 二叉树的先序,中序,后序递归和非递归实现
- nginx源码分析--多阶段请求处理