[HDU] 1325 Is It A Tree?

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1325

方法:建好有向图后,要判断是否是树,关键判断两点,即1,是否只有一个唯一的根节点;2,是否从根到任何节点都有且仅有一条路径。这就要就图中入度为0的定点有且仅有一个,其他的定点入度只能是1.

感想:简单题。

代码:

View Code
#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;
}
原文地址:https://www.cnblogs.com/kbyd/p/3019007.html