根据题目所给的3个不符合情况的条件,一个个判断图是否符合这3个条件即可

1.不能出现内部环,拓扑排序判断

2.不能有超过1个点的入度为0,因为只有一个树根

3.每个点最多一个入度

这里要注意的一点是这个点的数字是乱给的,所以最大值为8,但实际上不一定有8个点,这里记录一个最大值的参数,和一个总共点数的参数来进行判断即可

 #include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; const int N = ;
int in[N] , first[N] , k , maxn , del , sum;//maxn记录总共的点的个数,del记录删除了的点的个数 struct Edge{
int y , next;
}e[N<<]; void add_edge(int x , int y )
{
e[k].y = y , e[k].next = first[x];
first[x] = k++;
} void tuopu(int src)
{
del++;
for(int i = first[src] ; i!=- ; i=e[i].next){
int v = e[i].y;
in[v]--;
if(!in[v]) tuopu(v);
}
} int main()
{
// freopen("a.in" , "r" , stdin);
int x , y , cas = ;
while(~scanf("%d%d" , &x , &y)){
if(x < && y < ) break; memset(first , - , sizeof(first));
memset(in , - , sizeof(in));
k = , maxn = , sum = ;//sum表示总共点的个数
int cnt = , root , flag = ; //cnt记录有多少节点可以作为顶点了,flag作为判断是否有点超过1个入度
while(x != || y!=){
add_edge(x , y);
maxn = max(max(maxn , x) , y);
if(in[x] < ) in[x] = , sum++;
if(in[y] < ) in[y] = , sum++;
in[y]++;
if(in[y] >= ){
flag = ;
}
scanf("%d%d" , &x , &y);
}
// cout<<"maxn: "<<maxn<<endl;
if(flag){
// cout<<"有点超过两个入度 "<<endl;
printf("Case %d is not a tree.\n" , ++cas);
continue;
}
for(int i = ; i<=maxn ; i++)
if(!in[i]){
root = i;
cnt++;
if(cnt>=) break;
}
if(cnt >= ){
// cout<<"有超过两个点可作为树根 "<<endl;
printf("Case %d is not a tree.\n" , ++cas);
continue;
}
del = ;
tuopu(root);
if(del < sum)
{
// cout<<"出现内部环 "<<endl;
printf("Case %d is not a tree.\n" , ++cas);
}
else
printf("Case %d is a tree.\n" , ++cas);
}
return ;
}

最新文章

  1. Angular2 组件生命周期
  2. 精通 CSS 选择器(二)
  3. django admin下拉列表不显示值,显示为object的处理
  4. JS函数(获得widn)
  5. 【转】学习JAVA的步骤
  6. supervisor tornado 多进程多端口配置
  7. 使用Python实现Hadoop MapReduce程序
  8. asp.net用Zxing库实现条形码输出的具体实现
  9. 转:Hprose for php(二)——服务器
  10. [React Testing] Element types with Shallow Rendering
  11. 依赖注入(DI)和Ninject
  12. Thrift RPC实战(一).初次体验Thrift
  13. 老李分享:robotium常用API 1
  14. post提交数据长度限制问题
  15. absort函数和exit函数
  16. 数据库if判断语句
  17. Cloth
  18. Linux 防火墙和SELinux的开启和关闭
  19. 5J - 复习时间
  20. cocos2d-js 各浏览器上的表现

热门文章

  1. Django day 34 过滤课程,登录,redis,python操作redis
  2. mybatis编写mapper操作
  3. ASP.NET 知识点总结(六)
  4. 最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
  5. 题解报告:hdu 1015 Safecracker
  6. springmvc中的web.xml配置(包含中文乱码解决)
  7. 242 Valid Anagram 有效的字母异位词
  8. redis 配置多个ip 解决方案
  9. C#与正则表达式的例子
  10. (转)淘淘商城系列——Solr的安装