HDU 1272小希的迷宫 并查集_c - 小希的迷宫-程序员宅基地

技术标签: 并查集  HDU  

一、内容

 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她的设计图给你,让你帮忙判断她的设计图是否符合她的设计思路。比如下面的例子,前两个是符合条件的,但是最后一个却有两种方法从5到达8。

Input

输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个房间的编号。房间的编号至少为1,且不超过100000。每两组数据之间有一个空行。
整个文件以两个-1结尾。

Output

对于输入的每一组数据,输出仅包括一行。如果该迷宫符合小希的思路,那么输出"Yes",否则输出"No"。

Sample Input

6 8  5 3  5 2  6 4
5 6  0 0

8 1  7 3  6 2  8 9  7 5
7 4  7 8  7 6  0 0

3 8  6 8  6 4
5 3  5 6  5 2  0 0

-1 -1

Sample Output

Yes
Yes
No

二、思路

  • 2点之间只有一条路,可以判断2个点是否在一个连通块里面若在则之前就有一条路路了。
  • 最后还要判断一下整个图是否连通。
  • 还有的是这道题数据比较水。
  • 另外题目叫求的就是判断是否是一棵树。 那么树的话必然 总点数- 1 = 边。 所以直接判断一下即可。

三、代码

#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1e5 + 5;
int x, y, p[N];
bool vis[N]; 
int find(int x) {
    
	return x == p[x] ? x : (p[x] = find(p[x]));
} 
bool merge(int x, int y) {
    
	vis[x] = true; vis[y] = true;//标记有这个点 
	int fx = find(x), fy = find(y);
	if (fx == fy) return false; 
	p[fx] = fy;
	return true; 
}
int main() {
    
	while (scanf("%d%d", &x, &y)) {
    
		memset(vis, false ,sizeof(vis));
		if (x == -1) break;
		if (x == 0) {
    
			printf("Yes\n"); //特判下 
			continue;
		}
		for (int i = 1; i < N; i++) p[i] = i;
		bool ok = true;
		if (!merge(x, y)) ok = false;
		while (scanf("%d%d", &x, &y), x) {
    
			if (ok && !merge(x, y)) ok = false;
		}
		//看是否所有都连通
		int ct = 0;
		for (int i = 1; i < N; i++) {
    
			if (vis[i] && p[i] == i) ct++;
		} 
		if (ok && ct == 1) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
} 
#include <cstdio>
#include <set>
using namespace std;
const int N = 2e5 + 5;
int x, y, m;
set<int> st;
int main() {
    
	int T = 1;
	while (scanf("%d%d", &x, &y)) {
    
		st.clear();
		if (x == -1) break;
		if (x == 0) {
    
			printf("Yes\n", T++); //特判下 
			continue;
		}
		m = 1;
		st.insert(x); st.insert(y);
		while (scanf("%d%d", &x, &y), x) st.insert(x), st.insert(y), m++;
		//若边数 = 点数 - 1即成立 是一棵树 
		if (m == st.size() - 1) printf("Yes\n", T++);
		else printf("No\n", T++);
	}
	return 0;
} 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41280600/article/details/104629339

智能推荐

js手写题——高阶函数&函数柯里化&compose函数&ES6装饰器_js 装饰器和高阶函数-程序员宅基地

文章浏览阅读225次。高阶函数以函数作为参数/以函数作为返回值/常用于作为函数装饰器常用高阶函数:防抖Debounce和节流Throttlejs手写题——防抖和节流 Promise、setTimeout等等为什么要使用高阶函数?减少非纯函数的数量,增加系统稳定性与可靠性,纯函数方便做单元测试。函数柯里化函数式编程思想,既能减少代码冗余,也能增加可读性。它利用高阶函数,通过函数调用继续返回函数的形式,将接收多个参数转换为多次接收参数最后统一处理。理解函数柯里化function curry(fn,currArgs){_js 装饰器和高阶函数

数据库的索引_稠密索引和稀疏索引的区别-程序员宅基地

文章浏览阅读348次。(一)顺序索引1. 聚集索引(主索引)和非聚集索引(辅助索引)(1)聚集索引:包含记录的文件按照某个搜索码的顺序排序。(2)非聚集索引:搜索码制定的顺序与文件中记录的物理顺序不同(搜索码不是候选码)。 2. 稠密索引和稀疏索引(1)稠密索引:文件中的每个搜索码值都有一个索引项。在稠密聚集索引中,索引项包括搜索码值以及指向具有该搜索码值的第一条数据记录的指针;在稠密非..._稠密索引和稀疏索引的区别

嵌入式系统降低功耗的设计技术_在嵌入式软件开发过程中,降低功耗有哪些措施?-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏22次。电源通常被认为是整个嵌入式系统的“心脏”,绝大多数电子设备50%~80%的节能潜力在于电源系统。研制开发新型开关电源是节能的主要举措之一。 _在嵌入式软件开发过程中,降低功耗有哪些措施?

swift UITableView cell自适应高度_swift uitableviewcell 高度自适应-程序员宅基地

文章浏览阅读465次。http://blog.csdn.net/tujiaw/article/details/47073449http://fourfire.iteye.com/blog/2109724_swift uitableviewcell 高度自适应

清华大学 Homebrew-bottles 镜像使用帮助-程序员宅基地

文章浏览阅读1.9k次。2019独角兽企业重金招聘Python工程师标准>>> ..._homebrew bottlesh

BZOJ 2555: SubString(后缀自动机+lct)-程序员宅基地

文章浏览阅读70次。传送门解题思路  第二个操作其实就是把\(T\)在\(S\)上跑一遍匹配然后输出最后那个匹配点\(right\)集合的大小。现在考虑如何动态维护,发现\(right\)集合的转移为\(siz_{fa_i}=\sum siz_i\),那么假如一个字符其实就是给\(parent\)树上这个点的每个祖先\(+1\),这样就可以\(lct\)维护。代码#include<iostream>...

随便推点

Python 之12306网站验证码校验案例-程序员宅基地

文章浏览阅读5次。import requestsfrom PIL import Imageimport jsonsrequests.packages.urllib3.disable_warnings()headers = { "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like ..._12306验证 python

Vue面试相关问题_error with push/replace state domexception: failed-程序员宅基地

文章浏览阅读433次。1、vue解决了什么问题解决了用 DOM API 操作 UI 过于反人类的问题。React 通过 UI = f(data) 解决。Vue 通过 Reactive 响应式数据解决。更多关于上述问题理解2、MVVM的理解MVVM分为Model、View、ViewModel三者。Model:代表数据模型,数据和业务逻辑都在Model层中定义;View:代表UI视图,负责数据的展示;ViewModel:就是与界面(view)对应的Model。因为,数据库结构往往是不能直接跟界面控件一一对应上的_error with push/replace state domexception: failed to execute 'pushstate' on

使用自有数据集微调ChatGLM2-6B_chatglm微调自己的数据集-程序员宅基地

文章浏览阅读1.9k次,点赞38次,收藏32次。P-Tuning v2的原理是通过对已训练好的大型语言模型进行参数剪枝,得到一个更加小巧、效率更高的轻量级模型。具体地,P-Tuning v2首先使用一种自适应的剪枝策略,对大型语言模型中的参数进行裁剪,去除其中不必要的冗余参数。然后,对于被剪枝的参数,P-Tuning v2使用了一种特殊的压缩方法,能够更加有效地压缩参数大小,并显著减少模型微调的总参数量。_chatglm微调自己的数据集

GNU gettext utilities-程序员宅基地

文章浏览阅读3.4k次。Table of Contents1 Introduction1.1 The Purpose of GNUgettext1.2 I18n, L10n, and Such1.3 Aspects in Native Language Support1.4 Files Conveying Translations1.5 Overview of GNUgettext2 Th_gnu gettext utilities

全连接-普通卷积-深度可分离卷积-分组卷积-计算量和参数量_卷积取代全连接运算后需要学习的参数-程序员宅基地

文章浏览阅读1.8k次。全连接-普通卷积-深度可分离卷积-分组卷积-计算量和参数量一个全连接的参数量:params=(Ni+1)×No params=(N_i+1)\times{N_o} params=(Ni​+1)×No​其中,NiN_iNi​ 表示输入特征向量权重个数,NoN_oNo​ 表示输出特征向量的权重个数,+1表示偏置,直接理解参数量与输入输出个数有关。一个全连接的计算量:FLOPs=[Ii+(Ii−1)+1]×Io FLOPs= [I_i+(I_i-1)+1]\times{I_o} FLOP_卷积取代全连接运算后需要学习的参数

VS2005(VC++)远程调试方法_vs++2005-程序员宅基地

文章浏览阅读1k次。仅我目前了解很多人还在使用成本很高的本地调试方法——即在需要调试的机器上安装VS环境。这样的好处就是直接,但是成本很高,要在目标机器安装一个VS的Copy(国内可能不是问题:) 。还有源代码安全问题、同步问题等等!开始!已知:A、B两个服务器。如果是XP必须为最新的SP,2003的任意版本均可,是为了解决DCOM的通讯问题。A为开发用机,安装VS2005团队开发版。B为_vs++2005

推荐文章

热门文章

相关标签