利用并查集判断一个无向图是否成树
hdu 1272
利用并查集方法,找到各点的根节点。
几点注意:
一、树:1.无环 2.根节点入度为0,其余入度为1
判断依据:
1.若两个点的根节点相同(这两个点是父子关系),则形成环。
2.若所有点中只有一个点的根节点是他本身,则根节点入度为0。
二、
1. 0 0 :空树也是一颗树。
1 #include<iostream> 2 #include<algorithm> 3 #define Max 100005 4 using namespace std; 5 6 int f[Max]; 7 8 int root(int i) 9 { 10 if(f[i] == i) 11 return i; 12 else 13 return root(f[i]); 14 } 15 int huan; 16 void U(int a,int b) 17 { 18 int f1,f2; 19 f1 = root(a); 20 f2 = root(b); 21 if(f1 != f2) 22 { 23 f[f1] = f2; 24 } 25 else 26 { 27 huan = 1;//子环 28 } 29 } 30 int main() 31 { 32 int n,m,i,j,k,t; 33 while(~scanf("%d %d",&n,&m)) 34 { 35 huan = 0; 36 memset(f,0,sizeof(f)); 37 if(m == -1 && n == -1) 38 break; 39 else if(m == 0 && n == 0) 40 { 41 printf("Yes\n"); 42 continue; 43 } 44 else 45 { 46 f[n] = n; 47 f[m] = m; 48 U(n,m); 49 } 50 while(~scanf("%d %d",&n,&m)) 51 { 52 if(n == 0 && m == 0) 53 break; 54 else 55 { 56 if(f[n] == 0) 57 { 58 f[n] = n; 59 } 60 if(f[m] == 0) 61 { 62 f[m] = m; 63 } 64 U(n,m); 65 } 66 } 67 if(huan) 68 { 69 printf("No\n"); 70 continue; 71 } 72 k = 0; 73 for(i = 0;i < Max;i ++) 74 { 75 if(f[i] == i && f[i] != 0) //只有一个点的根节点是他本身 76 k ++; 77 } 78 if(k == 1) 79 printf("Yes\n"); 80 else 81 printf("No\n"); 82 } 83 return 0; 84 }
C++
转载于:https://www.cnblogs.com/ypacm/p/6690807.html
利用并查集判断一个无向图是否成树相关推荐
- ccsu1359 木棒相交 (叉积线段判交,并查集判断是否属于同一个集合)
题意:判断n条木棒中木棒a是否与木棒b相交.其中木棒的相交具有传递性. 首先用一个判断线段是否相交的函数判断相交: struct Point {double x;double y; }; typede ...
- java并查集判断是否是连通图_判断 连通图 (图论_并查集)
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的. 输入:每组数据的第一行是两个整数n 和m(0< n <=1000).n 表示图的顶点 数目,m 表示图中边的数目.如果n ...
- 使用并查集实现查找无向图的连通分量和求解有向图的强连通分量
目录 1.无向图的连通分量 2.求解连通分量算法的实现 3.有向图的强连通分量 4.求解有向图的强连通分量 使用C语言实现并查集 有向图和无向图 1.无向图的连通分量 无向图G中,如果存在从顶点v1到 ...
- java并查集_一个非常实用而且精妙的算法-并查集(java语言实现)
在学习数据结构的时候,老师多少会提到并查集,他的应用也是超级广泛.本文首先会通过案例来对并查集有一个介绍.然后给出并查集的java实现. 一.并查集原理 话说在江湖上有很多门派,这些门派相互争夺武林霸 ...
- 算法-并查集-加边无向图
题目描述:给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~ 输入描述:第一行两个正整数 n 和 m . 接下来的m行中,每行两个正整数 i . j ,表示 ...
- java并查集判断是否是连通图_并查集-判断图的连通
首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的.最后要解决的是整幅图的连通性问题.比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分 ...
- hdu1272——使用并查集判断是否形成环状
先上题目链接HDU1272 通读题目,再比较下面给出的三张图,我们可以发现前面两张输出YES的图里面没有回路,第三张图里面有回路,结合题目,我们可以发现这道题目考察的是"运用并查集判断图中是 ...
- HDU1878(判断一个无向图是否存在欧拉回路)
1.欧拉回路:定义:经过图(有向图或无向图)中每条边一次且仅一次并且行遍图中每个顶点的回路( 闭合的欧拉路径,即一个环,保证每条边都通过且仅通过一次). 2.问题1:判断一个无向图是否有欧拉回路的充要 ...
- 【数据结构】-图-判断一个无向图是否是一棵树
思路:判断一个无向图是否是一棵树,只需要判断该图是否是一个包含n个顶点的连通子图且边数为n-1,只要这两个条件都满足,那么就是一棵树. 因此我们可以采用深度遍历,若图连通,那么只要一次深度遍历就可以遍 ...
最新文章
- css 网格布局_我从CSS网格布局中学到的东西
- 同一服务器上多个版本的 sqlserver ,如何连接,改变某一实例的端口号
- 山寨SaaS--管理软件夜未眠(五)
- java加载图片白屏,tomcat白屏~
- 【JPA 级联保存/级联删除】@OneToMany (双向) 一对多【转】
- 洛谷P2770 航空路线问题(费用流)
- 看到小童鞋s茁壮成长
- 利用递归分割(Split)字符串
- DBCP数据库连接失效的解决方法(Io 异常:Connection reset)
- Bugly使用及APP版本更新
- Photoshop(简称Ps)制作个人logo
- 海马玩模拟器——搭建React Native环境
- 不愧是大厂牛人!用Java实现象棋小游戏(附超详细,超长究极无敌代码)
- 解密weblogic控制台账号密码
- 计算机安全模式无法启动修复,win7旗舰版安全模式故障修复教程
- 咖啡汪日志—— 回退兜底 及实用的服务降级策略
- mbedtls 入门第四课--移植mbedtls到VS和ESP8266--8266SDK SHA256移植
- 零知识证明(zero knowledge validation)
- 数据增强 data augmentation
- 科技“战”疫,AI的春天来了吗?