HDU1325 Is It A Tree?
问题链接:HDU1325 Is It A Tree?。
问题简述:若干组测试用例,每个测试用例包括若干组边(两个正整数组成),最后两个0(0 0)结束。判定每个测试用例是否为一棵树。
问题分析:判定有向图是否为一棵树的问题。可以用那些边构造一个并查集,构建并查集时,如果有向边的两个结点的根相同则不是一棵树,同时所有的结点指向的根应该是相同的。
注意点:结点虽然用整数表示,然而是随意的,而且范围不定。
程序说明:程序中,假定最大的结点不超过1000。将所有结点放入集合中,判定结点的根是否相同时,只需要考虑集合中的元素。
参考链接:UVALive5461 UVA615 POJ1308 HDU1325 Is It A Tree?。
AC的C++语言程序如下:
/* HDU1325 Is It A Tree? */#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;const int MAXN = 1000;// 并查集
class UF {
private:int v[MAXN+1];bool visited[MAXN+1];int length;bool nocircleflag; // 环标记int edgecount; // 边计数
public:UF(int n) {length = n;}// 压缩int Find(int x) {if(x == v[x])return x;elsereturn v[x] = Find(v[x]);}bool Union(int x, int y) {edgecount++;visited[x] = true;visited[y] = true;x = Find(x);y = Find(y);if(x == y) {nocircleflag = false;return false;} else {v[x] = y;return true;}}bool Union2(int x, int y) {edgecount++;visited[x] = true;visited[y] = true;int x2 = Find(x);int y2 = Find(y);if(x2 == y2 || y2 != y) {nocircleflag = false;return false;} else {v[x2] = y2;return true;}}// 计数法判定连通性bool isconnect() {int rootcount = 0;for( int i=0 ; i<=MAXN ; i++ )if(visited[i])rootcount++;return (rootcount == edgecount + 1);}// 唯一树根判定连通性bool isconnect2() {int root = -1;for( int i=0 ; i<=MAXN ; i++ )if(visited[i]) {if(root == -1)root = Find(i);elseif(Find(i) != root)return false;}return true;}inline bool nocircle() {return nocircleflag;}void init() {nocircleflag = true;edgecount = 0;for(int i=0; i<=length; i++)v[i] = i, visited[i] = false;}
};int main()
{UF uf(MAXN);int src, dest, caseno=0;while(scanf("%d%d", &src, &dest)!=EOF) {if(src < 0 && dest < 0) // 非常怪啊!!!break;uf.init();uf.Union2(src, dest);while(scanf("%d%d", &src, &dest)) {if(src==0 && dest==0)break;uf.Union2(src, dest);}if(uf.nocircle() && uf.isconnect2())printf("Case %d is a tree.\n", ++caseno);elseprintf("Case %d is not a tree.\n", ++caseno);}return 0;
}
参考链接:hdu1325Is It A Tree?(并查集)。
转载于:https://www.cnblogs.com/tigerisland/p/7564098.html
HDU1325 Is It A Tree?相关推荐
- UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)【废除!!!】
本文废除!!! 参考链接:UVALive5461 UVA615 POJ1308 ZOJ1268 Is It A Tree?[并查集] Regionals 1997 >> North Ame ...
- ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》
罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...
- 【HDU1325】Is It A Tree?(并查集基础题)
有以下坑点: 1.结束输入不一定-1,题目中的叙述只是说所有权值都为正值. 2.是否构成一棵树不能只判断是否只有一个根节点,没有环路,而且还需要判断每个节点的入度一定是1,不然就不是一棵树. (无环路 ...
- Is It A Tree?(hdu1325)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1325 Is It A Tree? Time Limit: 2000/1000 MS (Java/Oth ...
- 107. Binary Tree Level Order Traversal II
题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...
- 102. Binary Tree Level Order Traversal
题目 Binary Tree Level Order Traversal 层次遍历二叉树 链接 Given a binary tree, return the level order traversa ...
- Python---哈夫曼树---Huffman Tree
今天要讲的是天才哈夫曼的哈夫曼编码,这是树形数据结构的一个典型应用. !!!敲黑板!!!哈夫曼树的构建以及编码方式将是我们的学习重点. 老方式,代码+解释,手把手教你Python完成哈夫曼编码的全过程 ...
- [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- Code Forces Bear and Forgotten Tree 3 639B
B. Bear and Forgotten Tree 3 time limit per test2 seconds memory limit per test256 megabytes inputst ...
- Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)
Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...
最新文章
- 新型序列化类库MessagePack,比JSON更快、更小的格式
- android获取屏幕的分辨率方法
- 《剑指Offer》36:二叉搜索树与双向链表
- 苹果CMS音乐猪自适应网站模板
- 智能一代云平台(三十六):项目中如何做到避免传递依赖
- Python攻克之路-生成器
- HTML+CSS大学生个人网站作业模板~黑色的html5个人博客网站模板整站下载
- 嵌入式开发是什么,与纯软件什么区别?
- 苹果CMS V10后台登录验证码错误解决方法
- matlab中样本相关系数的计算与测试
- NeRF神经辐射场学习笔记(十)— BungeeNeRF(CityNeRF)实现以及代码注释
- 企业邮箱的优势有哪些
- 法卡斯定理(Fakars' Lemma)
- 台湾大学教授洪士灏对产业前景的讨论
- windows 鼠标突然变成锯齿状
- 循环神经网络RNN 2—— attention注意力机制(附代码)
- Arduino 开发ESP8266(ESP12F)模块
- P1498 南蛮图腾---洛谷(分冶)
- Q-Learning 、Sarsa与 DQN算法
- 软件的生命周期的若干阶段