北大OJ1308
2015-12-08 20:38
399 查看
#include<iostream> #include <cstdio> #include<cstring> using namespace std; struct node { int u,v; }edge[1005]; int parent[1005]; int findset(int x) { if(parent[x]==-1) return x; parent[x]=findset(parent[x]); return parent[x]; } void Union(int x,int y) { parent[y]=x; } int main() { int a,b,i=0,flag,u,v,t,k=1; while(1) { flag=1;i=1; cin>>a>>b; if(a==-1&&b==-1) break; memset(parent,-1,sizeof(parent)); if(a==0&&b==0) { cout<<"Case "<<k++<<" is a tree."<<endl; continue; } 4000 edge[0].u=a; edge[0].v=b; while(cin>>a>>b&&a&&b) { edge[i].u=a; edge[i++].v=b; } for (t=0;t<i;t++) { u= findset(edge[t].u); v= findset(edge[t].v); if(u==v||v!=edge[t].v) /* 成环或者一个节点的入度大于 1 */ { flag=0; break; } else Union(u,v);//合并顶点 } if(flag) { u=findset(edge[0].u); for(t=1;t<i&&u==findset(edge[t].u);t++); if(t>=i) cout<<"Case "<<k<<" is a tree."<<endl; else cout<<"Case "<<k<<" is not a tree."<<endl; } else cout<<"Case "<<k<<" is not a tree."<<endl; k++; } return 0; }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例