hdu 1272 小希的迷宮

2022-08-05 12:57:23 字數 2157 閱讀 6311

problem description

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

yesyes

noauthor

gardon

source

hdu 2006-4 programming contest

是一道關於並查集的題目。

主要的思路是依次合併所有的結點,如果即將合併的兩個結點已經屬於同一集合,那麼在它們合併之後必然會導致集合中的兩個結點之間的通路不唯一!

需要注意的問題有:

1.例子中給出的圖都是所有結點都連通的,但是實際輸入中可能產生兩個或兩個以上的集合,所以需要判斷。

2.結點的數字不是嚴格遞增的,比如例子1中,數字7不存在。因此最好使用一個數字mark來標記數字是否出現過。

3.當一組資料的開始直接輸入位0 0 ,應該認為是連通。輸出"yes".

1 #include 2 #include 

3#define n 10010145

inttree[n];

6bool

mark[n];78

int findroot(intx)9

1617}18

1920

intmain()

2132

33 memset(mark, 0, sizeof

(mark));

34 memset(tree, -1, sizeof

(tree));

3536

int max=-1,min=999999;37

38while(a||b)

3953

else

56 scanf("

%d %d

", &a, &b);57}

5859

if(flag)

6063

64else

71if(cnt==1

)72 printf("

yes\n");

73else

74 printf("

no\n");

75}7677}78

79return0;

80 }

說明:

while(a||b)

if(cnt==1

) printf(

"yes\n");

else

printf(

"no\n");

}

//**段b
else

if(cnt==1

) printf(

"yes\n");

else

printf(

"no\n");

}

HDU 1272 小希的迷宮

題目連結 並查集的簡單應用 解題思路 題目意思是找到判斷是不是連通無環的圖,首先想到的就是並查集。 1判斷成環的時候,只要判斷輸入邊的兩個點...

hdu 1272 小希的迷宮

思路 被這題卡了半天,媽的智障。 首先,還是沒有仔細審題的問題,這題抽象出來就是判斷一個圖是否為無環的只有一個連通分量的圖。直接用並查集做就好了。謹記審題仔細。 1 include 2 include 34 int par 200005 5 int ran 200005 6 bool v 10000...

HDU 1272 小希的迷宮

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