(并查集)小希的迷宫

题目:

上次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

分析与解答:

这里写图片描述

这题只要给了两个数就说明他们两个连结了,那么如果他们的根结点相同,那就形成了一个环,然而题目要求任意两个房间有且仅有一条路径可以相通,所以只要题目有环就不成立
而且这里迷宫是一个,就是说不能有多个根节点出现,那么由于我们初始化pre数组时候是每个pre[i]都等于i,所以最后找的时候我们只找出现过的i的pre[i]是不是等于i,就需要一个标记数组,如果i出现过,就标记为1,否则为零。

参考代码:
https://blog.csdn.net/mengxiang000000/article/details/50607030#commentsedit

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int ok;
int pre[100005];
int vis[100005];
int find(int x)                                       //查找根节点
{ int r=x;while ( pre[r] != r )                           //返回根节点 rr=pre[r];int i=x , j ;while( i != r )                                   //路径压缩{j = pre[ i ];               //j是i的原来的父结点 pre[ i ]= r ;              //现在把i的父结点改成根节点 i=j;                       //再把j的父节点改成根节点 }return r ;
}
void join(int x,int y)                           //判断x y是否连通,//如果已经连通,就不用管了 如果不连通,就把它们所在的连通分支合并起,
{int fx=find(x),fy=find(y);if(fx!=fy)pre[fx ]=fy;else ok=0;
}
int main()
{int a,b;while(~scanf("%d%d",&a,&b)){if(a==0&&b==0){printf("Yes\n");continue;}for(int i=0;i<100005;i++){pre[i]=i;vis[i]=0;}if(a==-1&&b==-1)break;join(a,b);ok=1;vis[a]=1;vis[b]=1;while(scanf("%d%d",&a,&b)&&a&&b){join(a,b);vis[a]=1;vis[b]=1;}if(ok==0){printf("No\n");continue;}else{int num=0;for(int i=0;i<=100005;i++){if(vis[i]&&pre[i]==i)num++;}if(num==1)printf("Yes\n");elseprintf("No\n");}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的三个环境变量是啥_JAVA中常用需要设置的三个环境变量(JAVA_HOME、CLASSPATH、PATH)...

JAVA中常用需要设置的三个环境变量:JAVA_HOME、CLASSPATH、PATH(一)  配置环境变量&#xff1a;(相对路径)1. JAVA_HOMEx:/jdk1.6.02. 用%JAVA_HOME%就可以取代:x:/jdk1.6.0这一部分CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/activation.jar…

(并查集)The Suspects

题目 Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize transmission to others, the best strategy is to separate the suspects from others. In the Not-Spre…

java字节流分为_Java文件流可分为字节流和字符流。

【单选题】TCP 和 UDP 协议的相似之处是 ()【单选题】That was the first time I ______ French with a foreigner.【判断题】【判断题】对互联网和搜索引擎的应用是奥巴马连续淘汰希拉里、麦凯恩等竞争对手的法宝之一。【单选题】friend意为“朋友”,请问,“友谊”如何表达?【…

(最小生成树)prim算法

总结一下&#xff1a; 如果选 0为起点&#xff0c;low_cost[i]表示以 0这个起点到i 这个终点的权值&#xff0c;我们找最小的权值的终点i&#xff0c;然后以i为起点&#xff0c;去更新low_cost[]这个数组&#xff0c;如果与i相连的数是j&#xff0c;现在有两种情况&#xff0c…

Java调用虚拟键盘输入法_Android 点击屏幕空白处收起输入法软键盘(手动打开)...

很多时候&#xff0c;我们在使用应用时&#xff0c;会出现输入法软键盘弹出的问题&#xff0c;通常情况下&#xff0c;我们默认会使用户点击返回键或者下一步对软键盘进行隐藏。为了更好的体验&#xff0c;我们可以实现当用户使用完毕软键盘时。点击屏幕空白区域即可实现收起输…

(并查集)Find them, Catch them

题目 The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon and Gang Snake. However, the police first needs to identify which gang a criminal belongs to. The present question is…

(并查集)食物链

题目&#xff1a; 动物王国中有三类动物A,B,C&#xff0c;这三类动物的食物链构成了有趣的环形。A吃B&#xff0c; B吃C&#xff0c;C吃A。 现有N个动物&#xff0c;以1&#xff0d;N编号。每个动物都是A,B,C中的一种&#xff0c;但是我们并不知道它到底是哪一种。 有人用两…

多线程销售问题java_Java多线程Runable售票系统实现过程解析

一、无等待&#xff0c;直接出票【虽然解决了不会冲票问题&#xff0c;但显然不符合实际生活】&#xff1a;package com.thread.sale;public class Sale {public static void main(String[] args) {//悟&#xff0c;那么设计爬虫的时候&#xff0c;下载的资源唯一&#xff0c;使…

(并查集)Wireless Network

问题&#xff1a; 地震发生在东南亚。 ACM&#xff08;亚洲合作医疗团队&#xff09;已经与膝上电脑建立了无线网络&#xff0c;但是一次意外的余震袭击&#xff0c;网络中的所有计算机都被打破了。计算机一个接一个地修复&#xff0c;网络逐渐开始工作。由于硬件限制&#xf…

mysql 索引空间大小_查看数据库表中容量大小,表有多少记录,占多少空间以及索引的大小,以及未使用空间...

直接在sqlserver查询窗执行就OK了&#xff0c;也是网上看到的&#xff0c;对日常管理数据库工作者来说也蛮有用的&#xff0c;可以及时的清理冗余的数据&#xff0c;缓解数据库服务器的压力。Create Table #TableSpaceInfo --创建结果存储表(NameInfo NVarchar(50) ,RowsInfo i…

带权并查集-Building Block

题目&#xff1a; John are playing with blocks. There are N blocks (1 < N < 30000) numbered 1…N。Initially, there are N piles, and each pile contains one block. Then John do some operations P times (1 < P < 1000000). There are two kinds of ope…

怎么解决缺少java.doc_java 生成doc帮助文档时出现的问题

正在加载程序包com.csust.czj的源文件...正在构造 Javadoc 信息...标准 Doclet 版本1.7.0_03正在构建所有程序包和类的树...正在生成D:\EclipseProject\TankWar2.7\doc\com\csust\czj\Blood.html...java.lang.IllegalArgumentExceptionat sun.net.www.ParseUtil.decode(ParseUt…

(最短路)Shopping

你刚搬进一套新公寓&#xff0c;有一长串你需要买的东西。不幸的是&#xff0c;买这么多东西需要去很多不同的商店。你想尽量减少购买所需物品所需的驾驶时间。 你的城市被组织成一组由道路连接的十字路口。你的房子和每家商店都在某个十字路口。你的任务是找到从你家出发的最…

java 设计char类型_JAVA中的char类型

1、JAVA中&#xff0c;char占2字节&#xff0c;16位。可在存放汉字2、char赋值char aa; //任意单个字符&#xff0c;加单引号。char a中;//任意单个中文字&#xff0c;加单引号。char a111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。注&am…

(dijkstra记录路径)find the longest of the shortest

Marica对Mirko很生气&#xff0c;因为他找到了一个新的女朋友&#xff0c;她想报仇。由于她不住在同一个城市&#xff0c;她开始为长途旅行做准备。我们知道每条路从一个城市到另一个城市需要多少分钟。 米尔科在车里无意中听到其中一条路正在维修&#xff0c;路被堵住了&…

友元是c还是java_[C++]【类】友元的三种声明及注意事项

类允许其他类或者函数访问它的非公有成员&#xff0c;但我们需要将访问类非公有成员的其他类或者函数成为它的友元。一、友元函数如果类想要把一个函数作为他的友元&#xff0c;只需要增加一条以 friend 关键字开始的函数声明语句即可。例如&#xff1a;class A{friend void fr…

(SPFA+最短路变形+回路对起点的影响)Arbitrage

套利是利用货币汇率的差异将一种货币的一个单位转换为同一货币的多个单位。例如&#xff0c;假设1美元兑0.5英镑&#xff0c;1英镑兑10.0法国法郎&#xff0c;1法国法郎兑0.21美元。然后&#xff0c;通过兑换货币&#xff0c;一个聪明的交易者可以从1美元开始购买0.5 * 10.0 * …

java 金庸群侠传_《金庸群侠传》MOD发展史(官方版本 转自铁血丹心论坛)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼三、MOD初期在事件修改器和场景编辑器被制作出来之后&#xff0c;修改档的制作被引向了新的方向。(此后包括事件修改的“修改档”即可称之为“MOD”&#xff0c;但由于修改的量比较小&#xff0c;故以“初期”命名)这一时期的第一个…

(模拟+floyd)Saving James Bond

题目&#xff1a; This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with…

python从数据库取数据 显示字段名_如何在python中将SQL数据库中的字段名放入列表中...

以下是我目前掌握的代码&#xff1a;from ConfigParser import *import MySQLdbconfiguration ConfigParser()configuration.read(someconfigfile.conf)db MySQLdb.connect(host configuration.get(DATABASE, MYSQL_HOST),user configuration.get(DATABASE, MYSQL_USER),pa…