#include<cstdio>
#include<vector>
#include<set>
#include<vector>
#include<queue>
using namespace std;
const int maxn=10100;
int indegree[maxn];
vector<int> adj[maxn];
int num;
set<int>st;
int toposort()
{
queue<int>q;
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{
if(indegree[*it]>1)
{
return 0;
}
else if(indegree[*it]==0)
{
q.push(*it);
}
}
if(q.size()>1)
{
return 0;
}
int num=0;
while(!q.empty())
{
int u=q.front();
q.pop();
num++;
for(int i=0;i<adj[u].size();i++)
{
int v=adj[u][i];
indegree[v]--;
q.push(v);
}
}
if(num==st.size())
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int a,b,Case=0;
while(scanf("%d%d",&a,&b)!=EOF)
{
Case++;
if(a<0 && b<0)
{
break;
}
if(a==0 && b==0)
{
printf("Case %d is a tree.\n",Case);
continue;
}
st.clear();
for(int i=0;i<maxn;i++)
{
adj[i].clear();
}
fill(indegree,indegree+maxn,0);
st.insert(a);
st.insert(b);
adj[a].push_back(b);
indegree[b]++;
int x=a;
while(scanf("%d%d",&a,&b))
{
if(a==0 && b==0)
{
break;
}
indegree[b]++;
st.insert(a);
st.insert(b);
adj[a].push_back(b);
}
printf("Case %d ",Case);
if(toposort()==1)
{
printf("is a tree.\n");
}
else
{
printf("is not a tree.\n");
}
}
return 0;
}
/**************************************************************
Problem: 1481
User: cust123
Language: C++
Result: Accepted
Time:70 ms
Memory:1992 kb
****************************************************************/
题目1481:Is It A Tree?
最新推荐文章于 2022-02-15 15:15:00 发布