並查集 小鑫的城堡

2022-05-03 08:03:11 字數 2167 閱讀 6484

time limit: 1000ms memory limit: 65536k

從前有乙個國王,他叫小鑫。有一天,他想建一座城堡,於是,設計師給他設計了好多簡易圖紙,主要是房間的連通的圖紙。小鑫希望任意兩個房間有且僅有一條路徑可以相通。小鑫現在把設計圖給你,讓你幫忙判斷設計圖是否符合他的想法。比如下面的例子,第乙個是符合條件的,但是,第二個不符合,因為從5到4有兩條路徑(5-3-4和5-6-4)。

多組輸入,每組第一行包含乙個整數m(m < 100000),接下來m行,每行兩個整數,表示了一條通道連線的兩個房間的編號。房間的編號至少為1,且不超過100000。

每組資料輸出一行,如果該城堡符合小鑫的想法,那麼輸出"yes",否則輸出"no"。

5

2 52 3

1 33 6

4 66

1 21 3

3 43 5

5 66 4

yesno

注意:1.此題運用並查集便可以做,最重要的一點是要先求出點的個數(詳見程式),再依據:如果點的個數n等於邊的條數m加1,就可保證任意兩個點之間有且僅有一條路徑可以相通。

2.剛開始時沒想到如何求點的個數,這是乙個難點,還有我把if(k == m + 1) 寫成了if(k = m + 1) 除錯了很久,這個錯誤出現了很多回,所以這裡寫一下,避免重蹈覆轍。

3.再說一下吧:測點的數目不好弄,因為如果輸入的點沒有1,只有2,3,4,5,6,不用a陣列標記一下的話,在這裡for(i = 1; i <= max; i++)  } k就會被 多加了一次,就錯了,第一次做時,忽略了必須得滿足任意兩點只之間都得有通路,就是下文的c,不明白可以看看第三組測試資料。

正確**:

#include#includeint bin[100002], a[1000002];//a陣列為標記陣列

int findx(int x)

void merge(int x,int y)

int main()

k = 0, c = 0;//k 表示總共輸入的點的個數,從0開始,

//c變數是為判斷此圖兩個點是否最起碼有一條路徑可以相通

for(i = 1; i <= max; i++)

if(c==1 && k == m + 1)//如果c等於1,則說明途中路全通,當路不全通時,c會大於1.

//當然c=1;只是其中乙個條件,因為當圖中點與點之間都聯通時,

//假設其中有兩個點之間有2條路可通,此時的c也等於1,但不滿

//足"任意兩個點有且僅有一條路徑可以相通"這一條件,所以還需

//加上 k == m + 1 這一條件,(字母含義詳見**)

printf("yes\n");

else

printf("no\n");

}return 0;

}以下為題目中測試資料:

52 5

2 31 3

3 64 6

bin[1] = 3

bin[2] = 5

bin[3] = 6

bin[4] = 6

bin[5] = 3

bin[6] = 6

yes 此時只有bin[6] = 6, 所以此時c為1, 而又滿足 k = m + 1, 所以yes

再看下組資料:

52 5

2 31 3

3 64 6

bin[1] = 3

bin[2] = 5

bin[3] = 6

bin[4] = 6

bin[5] = 3

bin[6] = 6

no 此時也只有b[6] = 6, 但不滿足 k = m + 1,所以no,

41 2

3 43 5

4 5bin[1] = 2

bin[2] = 2

bin[3] = 4

bin[4] = 5

bin[5] = 5

no 此時c為2, 因為bin[2] = 2和bin[5] = 5, 而k為5,m為4,滿足k = m + 1;

這下應該懂了^~^

並查集 小鑫的城堡

time limit 1000ms memory limit 65536k 從前有乙個國王,他叫小鑫。有一天,他想建一座城堡,於是,設計師給他設計了好多簡易圖紙,主要是房間的連通的圖紙。小鑫希望任意兩個房間有且僅有一條路徑可以相通。小鑫現在把設計圖給你,讓你幫忙判斷設計圖是否符合他的想法。比如下面的...

小鑫的城堡(並查集)

time limit 1000ms memory limit 65536k 有疑問?點這裡 從前有乙個國王,他叫小鑫。有一天,他想建一座城堡,於是,設計師給他設計了好多簡易圖紙,主要是房間的連通的圖紙。小鑫希望任意兩個房間有且僅有一條路徑可以相通。小鑫現在把設計圖給你,讓你幫忙判斷設計圖是否符合他的...

SDUT2798 小鑫的城堡(並查集)

time limit 1000ms memory limit 65536kb submit statistic discuss problem description 從前有乙個國王,他叫小鑫。有一天,他想建一座城堡,於是,設計師給他設計了好多簡易圖紙,主要是房間的連通的圖紙。小鑫希望任意兩個房間有...