// 题意: 给出一些边,由所给出的边能否构成一棵树.(节点数<100)

// 思路: n个顶点的树具有3个特点:连通,不含环,恰好包含n-1条边.只要有任意两个,就能推导出第3个// 所以我们可以通过是否连通和不含环来判断可以构成树.// 不含环: 通过并查集,如果边a->b, a和b的祖先结点都一样,则是有环,包括a->a,和 a->b 重复出现,// 连通: 只有一个根结点

#include <iostream>        //并查集using namespace std;#define maxn 1000int p[maxn],isNode[maxn];int find(int x){return p[x]==x ? x : p[x]=find(p[x]);}int main(){int t=1,a,b;while(cin>>a>>b&&a!=-1)        // a->b    {if(a==0)    //只有 0 0 ,空树也是一棵树         {            printf("Case %d is a tree.\n",t++);continue;        }for(int i=1;i<maxn;++i)        {            p[i]=i;            isNode[i]=0;        }int isTree=1,tail=0;while(a!=0)        {if(isTree)            {int x=find(a),y=find(b);if(x==y)    //说明存在环                {                    isTree=0;                }else                {                    p[y]=x;        //a->b                    isNode[a]=isNode[b]=1;    //标志结点                    tail=max(tail,max(a,b));    //结点的下标并不是顺序增加 1                 }                            }            cin>>a>>b;        }if(!isTree)            printf("Case %d is not a tree.\n",t++);else        {int roots=0;for(int i=1;i<=tail;i++)            {if(isNode[i]&&p[i]==i)    //找到一根结点                {                    roots++;if(roots>1)break;                }            }if(roots==1)                printf("Case %d is a tree.\n",t++);else                printf("Case %d is not a tree.\n",t++);        //没有根结点,或者不只一个根结点        }    }return 0;}

转载于:https://www.cnblogs.com/mjc467621163/archive/2011/07/20/2112182.html

poj 1308 Is It A Tree?相关推荐

  1. POJ 1308 Is It A Tree? (并查集)

    Is It A Tree? 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/M Description A tree is a w ...

  2. HDU 1325POJ 1308 Is it A tree ? [并查集+树判定]

    题目链接 poj hdu Is It A Tree? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...

  3. 杭电 1272 poj 1308 小希的迷宫

    这道题是我学了并查集过后做的第三个题,教我们的学姐说这是并查集的基础题,所以有必要牢牢掌握. 下面就我做这道题的经验,给大家一些建议吧!当然,我的建议不是最好的,还请各位大神指出我的错误来,我也好改正 ...

  4. 【POJ】1308 Is It A Tree?((并查集 + set)or (map))

    http://poj.org/problem?id=1308 这个题数组开到200就可以了,但题目中貌似没有说呢? 读入每一对顶点,看看他们是否在同一个集合中,如果是的话,肯定成环,不是一棵树. 用s ...

  5. poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)

    poj.org/problem?id=2892 poj上的一道数据结构题,这题正解貌似是Segment Tree,不过我用了Splay Tree来写,而且我个人认为,这题用Splay Tree会更好写 ...

  6. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  7. 算法学习经典例题整理

    陆续会对本篇博客进行更新! 搜索:https://vjudge.net/contest/292597 区间DP:https://vjudge.net/contest/293892 树状背包:https ...

  8. kuangbin带你飞 专题1-23 题单

    kuangbin大神,对于打过ACM比赛的ACMer,无人不知无人不晓. 在此,附上vjudge平台上一位大神整理的[kuangbin带你飞]专题目录链接. [kuangbin带你飞专题目录1-23] ...

  9. 老鱼的-kuangbin专题题解

    kuangbin专题问题一览 专题一 简单搜索 POJ 1321 棋盘问题 POJ 2251 Dungeon Master POJ 3278 Catch That Cow POJ 3279 Flipt ...

最新文章

  1. 服务注册发现与kit实践
  2. linux系统文件分类,Linux系统文件概念和文件类型
  3. Python 网络爬虫笔记5 -- Beautiful Soup库实战
  4. SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据
  5. 这个可能打败Python的编程语言,正在征服科学界
  6. Linux C DNS 查询IP地址
  7. linux命令---ln
  8. Educational Codeforces Round 41 (Rated for Div. 2)
  9. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_04-vuejs研究-vuejs基础-v-model指令...
  10. 计算机应用基础考试excel操作题,自学考试_《计算机应用基础》_上机操作_模拟练习题...
  11. 这两款实用的win10录屏软件,你们千万别错过
  12. JCEF vs JxBrowser
  13. 全面剖析雅虎助手以及网络实名的流氓行径(5)
  14. java转码mp4的代码_JAVA视频格式转换 avi转mp4
  15. ccf试题1:小中大
  16. php干货网,php高手干货【必看】
  17. winedit注册码
  18. VS code 使用技巧-设置鼠标滚轮翻页速度(Mac版本)
  19. 【SpringBoot 】 十三、使用Redis
  20. 中石油大学22春季《大学英语(四)#》第一阶段在线作业

热门文章

  1. python 的csr_python的高级数组之稀疏矩阵
  2. slf4j注解log报错_SpringBoot自定义日志注解,用于数据库记录操作日志,你用过吗?...
  3. qgis 图片_QGIS入门教程公告!!!
  4. 网站开发用什么语言好_网站开发教程:企业如何用网站开启在线业务?
  5. php strpos无效,簡單的PHP strpos功能不起作用,為什么?
  6. mysql数据库表中的类型_MySQL数据库中表类型MyISAM与InnoDB的区别
  7. 【渝粤教育】国家开放大学2018年秋季 0690-21T化工原理及实验 参考试题
  8. 【渝粤教育】国家开放大学2018年春季 0269-22T文学概论 参考试题
  9. 【渝粤题库】陕西师范大学720001 分子生物学
  10. linux 嵌入式串口通信设计目的,基于linux的嵌入式串口通信.doc