版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/shengweisong/article/details/34099151

做了一上午,最终ac了 wa了一次主要是忘了还有环!。!

 

主要是运用并查集知识。又复习了一次!!

思路:输入之后找能不能成环,成环就不是,其次还要推断是不是有两个父节点,假设有两个父节点也不是。之后就找相关的祖先就好了。

还要注意:假设仅仅有一个节点,也是树。假设有两个或多个根节点也不是树;假设没有根节点也不是

链接

pid=1325" rel="nofollow">http://acm.hdu.edu.cn/showproblem.php?pid=1325

代码

#include<stdio.h>
int fat[1000];
int father( int n ) //寻找祖先
{
if( fat[n] != n ) fat[n] = father(fat[n]);
return fat[n];
}
int main()
{
int i, j, n, m, a[1000], b[1000], v = 1;
while( 1 ){
for( i = 0; i < 1000; i ++ )
fat[i] = i;
int flag = 0;
scanf( "%d%d", &a[0], &b[0] );
if( a[0]< 0&&b[0]< 0 ) break;
fat[b[0]] = a[0];//由题意可知fat[b[i]] = a[i];
i = 1;
while( scanf("%d%d", &a[i], &b[i]), a[i]||b[i] ){
if( flag == 0 ){ //假设flag=1那就表明成环了,或者有两个父节点
if( fat[a[i]] == b[i] ){
flag = 1; //推断是不是成环
continue;
}
if( fat[b[i]] != b[i] ) {
flag = 1;//推断是不是有两个父节点
continue;
}
if( fat[a[i]]!= a[i] )
fat[a[i]] = father(a[i]);
fat[b[i]] = a[i];
}
else{
fat[b[i]] = a[i];
}
i++;
}
// for( j = 0; j < i; ++ j ) //以下四行没有必要,假设没有根节点。就是环(多亏了某仙鹤同学)
// if( fat[a[j]] == a[j] ) break;;
// if( i == j )
// flag = 1;
if( flag ){
printf( "Case %d is not a tree.\n", v++ );
continue;
}
else{
if( i == 1 ){ //假设仅仅有一组
printf( "Case %d is a tree.\n", v++ );
continue;
}
for( j = 1; j < i; ++ j ) //推断是不是有多个根节点
if( fat[a[j]] != fat[a[0]] ){
printf( "Case %d is not a tree.\n", v++ );
break;
}
if( j == i )
printf( "Case %d is a tree.\n", v++ );
}
}
return 0;
}

最新文章

  1. Dynamics CRM 2013 installation
  2. java 使用 poi 解析excel
  3. C# 用代码创建 DataSet 和 DataTable 的列和记录
  4. 一模 (3) day2
  5. Jquery 控件
  6. Windows I/O模型之一:Select模型
  7. hdu_5890_Eighty seven(bitset优化DP)
  8. webpack-hot-middleware 用于 livereload
  9. ACM心路
  10. HDU5908 Abelian Period 暴力
  11. 初步了解php,实现注册及登录
  12. oracle 树形表结构查询 排序
  13. JS之正则表达式
  14. 判断(if)语句
  15. 每天一个linux命令(8):scp使用
  16. oracle 11g rac asm磁盘组增加硬盘
  17. BFS模板
  18. 动态添加XtraTabControl的page页和子窗体
  19. java.rmi.server.ExportException: Port already in use: 1099; nested exception is
  20. Oracle create tablespace 创建表空间语法详解

热门文章

  1. 0903NOIP模拟测试赛后总结
  2. PAT甲级——A1070 Mooncake
  3. C# 判断当前请求是GET、还是POST ?
  4. Referenced assembly does not have a strong name
  5. 利用jQuery获取jsonp
  6. Harvest of Apples (HDU多校第四场 B) (HDU 6333 ) 莫队 + 组合数 + 逆元
  7. 安装配置git服务
  8. leetcode 324 Wiggle Sort 2
  9. Redis高可用及集群
  10. 19-10-23-L-Mor