time limit: 1000ms memory limit: 65536k
從前有乙個國王,他叫小鑫。有一天,他想建一座城堡,於是,設計師給他設計了好多簡易圖紙,主要是房間的連通的圖紙。小鑫希望任意兩個房間有且僅有一條路徑可以相通。小鑫現在把設計圖給你,讓你幫忙判斷設計圖是否符合他的想法。比如下面的例子,第乙個是符合條件的,但是,第二個不符合,因為從5到4有兩條路徑(5-3-4和5-6-4)。
多組輸入,每組第一行包含乙個整數m(m < 100000),接下來m行,每行兩個整數,表示了一條通道連線的兩個房間的編號。房間的編號至少為1,且不超過100000。
每組資料輸出一行,如果該城堡符合小鑫的想法,那麼輸出"yes",否則輸出"no"。
5yesno2 52 3
1 33 6
4 66
1 21 3
3 43 5
5 66 4
注意: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 從前有乙個國王,他叫小鑫。有一天,他想建一座城堡,於是,設計師給他設計了好多簡易圖紙,主要是房間的連通的圖紙。小鑫希望任意兩個房間有...