1. 程式人生 > >杭電1272(並查集)判斷環

杭電1272(並查集)判斷環

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

這個題和之前的那兩個題目不同,看上去是判斷是否有多條路,實際只要判斷裡面是否有環形區域就行了;有環則表示不止一條路,也是用並查集算的。

#include<iostream>
using namespace std;
int hk[100005];
bool falg,visit[100005];
void inlt(int a)
{
	for(int A=1;A<=a;a++)
	{
		hk[A]=A;
	}
} 
int find(int x)
{
	while(hk[x]!=x)
	{
		x=hk[x];
		//hk[x]=find(hk[x]);
	}
	return x;
}
void ls(int x,int y)
{
	int a,b;
	a=find(x);
	b=find(y);
	if(a !=b)
		hk[a]=b;
	else falg=false;
}
int main()
{
	int n,m,nnm;
	while(cin>>n>>m)
	{
		if(n==-1&&m==-1) break;
		if(n==0&&m==0){ cout<<"Yes"<<endl; continue;}
		for(int a=1;a<100005;a++)
		{
			hk[a]=a;
			visit[a]=0;
		}
		visit[n]=1;
		visit[m]=1;
		falg =1;
		ls(n,m);
		while(cin>>n>>m)
		{
			if(n==0&&m==0)
				break;
			ls(n,m);
			visit[n]=1;
			visit[m]=1;
		}
		nnm=0;
		for(int a=1;a<100005;a++)
		{
			if(visit[a]&&hk[a]==a) nnm++;
			if(nnm>1 ) falg=0;
		}
		if(falg)cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
	return 0;
}


相關推薦

1272判斷

上次Gardon的迷宮城堡小希玩了很久(見Problem B),現在她也想設計一個迷宮讓Gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果有一個通道連通了房間A和B,那麼既可以通過它從房間A走到房間B,也可以通過它從房間B走到

1272+判斷是否存在環形區域

小希的迷宮(難度:1) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 上次Gardon的迷宮城

HDU 1272

題意:上次Gardon的迷宮城堡小希玩了很久(見Problem B),現在她也想設計一個迷宮讓Gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果有一個通道連通了房間A和B,那麼既可以通過它從房間A走到房間B,也可以通過它從房間B走到房間A,為了提高難度,

1232 暢通工程

Problem Description 某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省政府“暢通工程”的目標是使全省任何兩個城鎮間都可以實現交通(但不一定有直接的道路相連,只要互相間接通過道路可達即可)。問最少還需要建設多少條道路? 

小希的迷宮 HDU - 1272判斷是否成

#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int fa[100005],vis[100005],flag;//flag判斷是否成環 int n , m

1272判斷是否成

#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; int fa[100005],vis[100005],flag;//flag判斷是否

hdu 1272 小希的迷宮

小希的迷宮                                                                          Time Limit: 2000/1000 MS (Java/Others)    Memory Limit:

Codeforces 325 D-Reclamation

name clam .cn 每次 .html con ret ring true 借用 鏈接 的題意和解法分析的圖片。 對於這種環的形式,先用常用的手段復制一份在右邊。每次加點的過程只要看加完之後能不能通過已有的格子聯通,如果聯通則顯然已經形成了一個環。這裏判斷聯通我

[luoguP2342] 疊積木

() click hide open closed include tps 技術 char 傳送門 up[i] 表示一個木塊上面有多少個 all[i] 表示整個連通塊內有多少個 那麽 一個木塊下面的木塊個數為 all[root[i]] - up[i] - 1

hdu5652:India and China Origins

and std map printf etc scanf 16px 兩個 for   倒序操作用並查集判斷是否連通,新技能get√(其實以前就會了   這題細節很多。。。搞得整個程序都是調試輸出,幾度看不下去想要重寫   並查集到現在大概掌握了兩個基本用途:判斷是否連通 /

POJ 2492 A Bug's Life

ont set -1 flat com rom init red least Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assum

LA 3027 Corporative Network

using namespace while += fin clas 都是 ont roo 有n個點,一開始都是孤立的,然後有I,E兩種操作 I u v,把u的父節點設為v,距離為abs(u-v) % 1000,保證u之前沒有父節點 E 詢問u到根節點

HDU 1232 暢通工程

while name style queue input 結束 inf long 城市 某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省政府“暢通工程”的目標是使全省任何兩個城鎮間都可以實現交通(但不一定有直接的道路

uva live 7638 Number of Connected Components

txt 通過 open main eps div cte efi ive 題目鏈接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_

The Suspects

self 一點 rate nim 節點 lists tran 並查集 arc 個人心得:最基礎的並查集經典題。借此去了解了一下加深版的即加權並查集,比如食物鏈的題目,這種題目實行起來還是有 一定的難度,不僅要找出與父節點的關系,還要在路徑壓縮的時候進行更新,這一點現在還是沒

POJ-1118 食物鏈

ace scan problem tro sca sam 我們 %d 很好 食物鏈 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 75814 Accepted: 22528

CodeForces 445B. DZY Loves Chemistry

word other res 技術分享 increase ted weight hit next 轉載請註明出處:http://blog.csdn.net/u012860063?viewmode=contents 題目鏈接:http://codeforces.co

[BZOJ3712]Fiolki 重構樹

sample size 不知道 沈澱 過程 表示 deep hellip long 3712: [PA2014]Fiolki Time Limit: 30 Sec Memory Limit: 128 MB Description 化學家吉麗想要配置一種神奇的

Farm Irrigation HDU - 1198

i++ 灌溉 pan isp hdu color img 二進制表示 clu Farm Irrigation HDU - 1198 題意:給11種管道,問草地最少需要打多少個井才可以全部灌溉。 把每種管道的狀態用二進制表示一下,然後對每一塊草地,判斷能否和上面或者左面

Building Block HDU - 2818

freopen return 記錄 scanf splay else 一次 == gif Building Block HDU - 2818 題意:搬磚。。。每一次可以把a所在的那一堆放到b所在的那一堆上面,問第x號磚下面有幾塊磚。 記錄一下到根節點的距離(dw),以