UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)【废除!!!】
本文废除!!!
参考链接:UVALive5461 UVA615 POJ1308 ZOJ1268 Is It A Tree?【并查集】
Regionals 1997 >> North America - North Central NA
问题链接:UVALive5461 UVA615 POJ1308 Is It A Tree?。
问题简述:若干组测试用例,最后两个-1(-1 -1)结束。每个测试用例包括若干组边(两个整数组成),最后两个0(0 0)结束。判定每个测试用例是否为一棵树。
问题分析:判定有向图是否为一棵树的问题。可以用那些边构造一个并查集,构建并查集时,如果有向边的两个结点的根相同则不是一棵树,同时所有的结点指向的根应该是相同的。
注意点:结点虽然用整数表示,然而是随意的,而且范围不定。
程序说明:程序中,假定最大的结点不超过100000。将所有结点放入集合中,判定结点的根是否相同时,只需要考虑集合中的元素。
参考链接:UVALive5461 UVA615 POJ1308 HDU1325 Is It A Tree?。
AC的C++语言程序如下:
/* UVALive5461 UVA615 POJ1308 Is It A Tree? */#include <iostream>
#include <cstdio>using namespace std;const int MAXN = 100000;// 并查集
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 isconnect() {int rootcount = 0;for( int i=0 ; i<=MAXN ; i++ )if(visited[i])rootcount++;return (rootcount == edgecount + 1);}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()
{int src, dest, caseno=0;UF uf(MAXN);while(scanf("%d%d", &src, &dest) != EOF) {if(src == -1 && dest == -1)break;uf.init();if(src==0 && dest==0) {//为空树printf("Case %d is a tree.\n", ++caseno);} else {uf.Union(src, dest);for(;;) {scanf("%d%d", &src, &dest);if( src==0 && dest==0 )break;uf.Union(src, dest);}if(uf.nocircle() && uf.isconnect())printf("Case %d is a tree.\n", ++caseno);elseprintf("Case %d is not a tree.\n", ++caseno);}}return 0;
}
UVALive5461 UVA615 POJ1308 Is It A Tree?(解法二)【废除!!!】相关推荐
- 从LeetCode 679. 24 Game--C++ 解法--二十四点 到穷举24点所有可能性-24点大全
从LeetCode 679. 24 Game–C++ 解法–二十四点 到穷举24点所有可能性 此文首发于我的个人博客:zhang0peter的个人博客 LeetCode题解文章分类:LeetCode题 ...
- [CareerCup] 4.5 Validate Binary Search Tree 验证二叉搜索树
4.5 Implement a function to check if a binary tree is a binary search tree. LeetCode上的原题,请参见我之前的博客Va ...
- 隐形Euler方法的java程序_常微分方程的解法 (二): 欧拉(Euler)方法
上一节讲了 常微分方程的三种离散化 方法:差商近似导数.数值积分.Taylor 多项式近似. 目录 §2 欧拉(Euler)方法 2.1 向前 Euler 公式.向后 Euler 公式 ...
- HDU1106 排序(解法二)(废除!!!)
本文废除!!! 请点击以下的参考链接!!! 参考链接:HDU1106 排序[字符串+整数+排序]. 问题链接:HDU1106 排序. 问题简述:参见上述链接. 问题分析:这个程序的逻辑并不十分复杂,主 ...
- 【MPI编程】矩阵向量乘法--解法二(高性能计算)
简述 有留心过的朋友可能会发现,其实我没写过解法一. 因为解法一就是大家最直观的感受的一种解法. 将矩阵按照行划分,之后,再每个线程都用整个向量跟这个块做内积.之后,传回来一个数值. 这里的方法二, ...
- 常微分方程的解法 (二): 欧拉(Euler)方法
上一节讲了 常微分方程的三种离散化 方法:差商近似导数.数值积分.Taylor 多项式近似. 目录 §2 欧拉(Euler)方法 2.1 向前 Euler 公式.向后 Euler 公式 ...
- 决策树(decision tree)(二)——剪枝
决策树(decision tree)(二)--剪枝 **注:本博客为周志华<机器学习>读书笔记,虽然有一些自己的理解,但是其中仍然有大量文字摘自周老师的<机器学习>书. 决策树 ...
- SQL Tree解法
create table tb(id varchar(3) , pid varchar(3) , name varchar(10)) insert into tb values('001' , nul ...
- HDU4607 Park Visit(解法二)【废除!!!】
本文废除!!! 参见链接:HDU4607 Park Visit[DFS] 问题链接:HDU4607 Park Visit. 题意简述:莱克尔和她的朋友到公园玩,公园很大也很漂亮.公园包含n个景点通过n ...
最新文章
- 设置WebStorm用Ctrl+鼠标滚轮上、下调整编辑器代码字体大小
- Visual Studio 2015 速递(4)——高级特性之移动开发
- 5渲染判断_先渲染再对焦,KeyShot 深度通道在 Photoshop 中的对接
- android spp协议,Android蓝牙开发SPP协议通信
- sscom打开时提示error reading comcombobox1
- java proj4j 兰勃特投影设置地球半径 (+R )无效问题
- ffmpeg源码国内gitee下载
- 百度信息流投放效果不稳定,意图词要怎么筛选,先测试词包还是先测试创意好?
- windows 远程桌面连接 bat
- Android 10去除电池图标以及设置
- unity材质球复制
- Excel表格设置下拉选项并应用到整列及清除下拉项设置
- Linux永久删除文件恢复
- JS 时间加减 / 小时加减
- 计算机上静音快捷键是什么,电脑静音快捷键是什么(如何设置电脑一键静音?)...
- 解决飞鸽传书看不到自己想要找的好友
- android studio 61歌曲服务器搭建 歌曲app 下载 完整代码
- Hang Detect 问题
- 找零钱问题——贪心算法
- stm8L 初始化系统时钟