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

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;
}

hdoj 1325 Is It A Tree? 【并查集】的更多相关文章

  1. Hdu.1325.Is It A Tree?(并查集)

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  2. hdu 1325 Is It A Tree? 并查集

    Is It A Tree? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  3. Is It A Tree?(并查集)

    Is It A Tree? Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26002   Accepted: 8879 De ...

  4. CF109 C. Lucky Tree 并查集

    Petya loves lucky numbers. We all know that lucky numbers are the positive integers whose decimal re ...

  5. HDU 5606 tree 并查集

    tree 把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小. 开一个并查集,每次读到边权是0的边就合并.最后Ans​i​​=size[findset(i)],size表示每个并 ...

  6. [Swust OJ 856]--Huge Tree(并查集)

    题目链接:http://acm.swust.edu.cn/problem/856/ Time limit(ms): 1000 Memory limit(kb): 10000 Description T ...

  7. Codeforces Round #363 (Div. 2)D. Fix a Tree(并查集)

    D. Fix a Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  8. Is It A Tree?(并查集)(dfs也可以解决)

    Is It A Tree? Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submi ...

  9. tree(并查集)

    tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

随机推荐

  1. 异或前缀和,组合数学——cf1054D

    /* 每个异或前缀和sum[i]只有两个值 区间异或和不为0,即两个不相等的前缀和 sum[i]的两个前缀和只要标记一个就可以了,为了去重只用map保存最小的那个来计数 最后统计相同的前缀和时,为了使 ...

  2. 如何在window和mac下查找数据库

    1. mac 下终端使用步骤 cd /Applications/xampp/bin ./mysql -u root 2. window CMD命令中执行步骤 D: cd  D:/xampp/mysql ...

  3. Spring中的Junit

    Spring中的Junit package com.imooc.test.base; import org.junit.After; import org.junit.Before; import o ...

  4. 深入浅出 Java Concurrency (38): 并发总结 part 2 常见的并发场景[转]

    常见的并发场景 线程池 并发最常见用于线程池,显然使用线程池可以有效的提高吞吐量. 最常见.比较复杂一个场景是Web容器的线程池.Web容器使用线程池同步或者异步处理HTTP请求,同时这也可以有效的复 ...

  5. 图书-技术-SpringBoot:《Spring Boot2 + Thymeleaf 企业应用实战》

    ylbtech-图书-技术-SpringBoot:<Spring Boot2 + Thymeleaf 企业应用实战> <Spring Boot 2+Thymeleaf企业应用实战&g ...

  6. Docker在线文档收集

    极客学院 kubernetes中文社区 易百教程

  7. 群晖系统下btfs(占用5%)和ext4文件格式的硬盘占用和选择

    1个人感觉选择ext4就可以,毕竟重要数据会设置raid1 不重要的数据也不需要快照什么的 商用除外 对于一个4t的硬盘 实际容量3726G 使用ext4可用空间3666G,群晖 占用60G大概1.6 ...

  8. mysql80版本—yum安装—图文全过程

    这是官网的Quick Giude:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 以下为自己安装的步骤: 第一步:下载.rpm安装包 ...

  9. https证书加密

    对称加密 浏览器向服务端发送请求时,服务端首先给浏览器发送一个秘钥,浏览器用秘钥对传输的数据进行加密后发送给浏览器,浏览器拿到加密后的数据使用秘钥进行解密 非对称加密 服务端通过rsa算法生成一个公钥 ...

  10. Ubuntu安装QQ、微信、微信开发者工具、搜狗输入法

    wine 待补充……