poj 1308 is it a tree
2013-05-19 19:52
323 查看
题目的意图还是很明显的就是判断这些给定的关系是不是能组成一棵树。所谓树也就是只有一个节点可以被称作root,这个也就是根节点。这里面的深层次含义就是有且只有一个节点的入度是0,其他的节点的入度为1,只里面要考虑进去自己连着自己的自环,树这个数据结构中自环是不允许的。所以这个题目就成了统计所有参与的节点的入度问题了。看程序,0ms。
#include<iostream> #include<cstring> using namespace std; int count[500]; int visited[500]; int max(int a,int b) { if(a>b) return a; else return b; } int main() { int a,b,i,t,flag,sum,maxi,sum2; t=0; while(cin>>a>>b) { t=t+1; flag=0; sum=0; sum2=0; memset(visited,0,sizeof(visited)); memset(count,0,sizeof(count)); if(a==-1&&b==-1) break; if(a==0&&b==0) { cout<<"Case "<<t<<" is a tree."<<endl; continue; } visited[a]=1; visited[b]=1; if(a==b) flag=1; count[b]+=1; maxi=max(a,b); while(cin>>a>>b) { if(a==0&&b==0) break; maxi=max(maxi,a); maxi=max(maxi,b); visited[a]=1; visited[b]=1; if(a==b) flag=1; count[b]+=1; } for(i=1;i<=maxi;i++) if(visited[i]==1) { sum=sum+1; sum2=sum2+count[i]; } sum=sum-sum2; if(sum!=1||flag==1) cout<<"Case "<<t<<" is not a tree."<<endl; else cout<<"Case "<<t<<" is a tree."<<endl; } return 0; }
相关文章推荐
- POJ1308——Is It A Tree?
- POJ 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- POJ 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- HDU 1325&&POJ 1308 Is It A Tree? (并差集)
- POJ1308 Is It A Tree?
- POJ 1308 Is it a tree??
- poj 1308 Is It A Tree?(并查集)
- Is It A Tree?(POJ_1308)
- POJ1308 Is It A Tree?
- poj 1308 Is it a Tree?
- POJ 1308 Is it a tree??
- POJ 1308 Is It A Tree?
- POJ 1308-Is It A Tree?(并查集)
- poj 1308 Is It A Tree?
- poj 1308 Is It A Tree?
- POJ——1308Is It A Tree?(模拟拓扑排序判断有向图是否为树)