题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1325
方法:建好有向图后,要判断是否是树,关键判断两点,即1,是否只有一个唯一的根节点;2,是否从根到任何节点都有且仅有一条路径。这就要就图中入度为0的定点有且仅有一个,其他的定点入度只能是1.
感想:简单题。
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> using namespace std; const int MAX = 100005; int indegree[MAX]; int main() { int a,b; int i=0,j=0,kk=0; memset(indegree,-1,sizeof(indegree)); while(scanf("%d %d",&a,&b)!=EOF) { if(a==-1 && b==-1) break; else { if(a==0 && b==0) { cout<<"Case "<<kk+1<<" "; if(i==0) cout<<"is a tree."<<endl; else { int coutZero=0; bool valid = true; for(int k=0;k<MAX;k++) { if(indegree[k]!=-1) { if(indegree[k]==0) coutZero++; else if(indegree[k]>1) { valid = false; break; } if(coutZero>1) { valid = false; break; } } } if(valid && coutZero!=0) cout<<"is a tree."<<endl; else cout<<"is not a tree."<<endl; memset(indegree,-1,sizeof(indegree)); kk++; } } else { if(indegree[a]==-1) indegree[a] = 0; if(indegree[b]==-1) indegree[b] = 0; indegree[b] ++; i++; } } } return 0; }