7-47 紅色警報 (25分)
戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被**為多個無法連通的區域時,就發出紅色警報。注意:若該國本來就不完全連通,是**的k個區域,而失去乙個城市並不改變其他城市之間的連通性,則不要發出警報。
輸入在第一行給出兩個整數n
(0 <n
≤ 500)和m
(≤ 5000),分別為城市個數(於是預設城市從0到n
-1編號)和連線兩城市的通路條數。隨後m
行,每行給出一條通路所連線的兩個城市的編號,其間以1個空格分隔。在城市資訊之後給出被攻占的資訊,即乙個正整數k
和隨後的k
個被攻占的城市的編號。
注意:輸入保證給出的被攻占的城市編號都是合法的且無重複,但並不保證給出的通路沒有重複。
對每個被攻占的城市,如果它會改變整個國家的連通性,則輸出red alert: city k is lost!
,其中k
是該城市的編號;否則只輸出city k is lost.
即可。如果該國失去了最後乙個城市,則增加一行輸出game over.
。
5 4
0 11 3
3 00 4
51 2 0 4 3
city 1 is lost.
city 2 is lost.
red alert: city 0 is lost!
city 4 is lost.
city 3 is lost.
game over.
思路:
判斷圖的聯通性最好的是用並查集,但是這題圖會一直改變,那麼我們就隨著圖的改變不斷改變並查集來判斷。
並查集中的元素最多的集合就是國家的城市數量。
如果乙個城市消失後當前國家的城市數比原來減少了1個以上,那麼就會改變城市的連通性。
否則就不改變連通性。
最後判斷消失的城市數是否等於國家總的城市數來輸出最後一句就行。
**:
#includeusing namespace std;
int far[505];
pairp[5005];
void create(int n)
int cnt=0;
for(int i=0;i>k;
for(int i=0;i>vex;
mergep(vex,m);
create(n);
for(int i=0;i1)cout<<"red alert: city "
}
if(n==k)cout<<"game over.\n";
}
PTA 天梯賽 L2 013 紅色警報 25分
戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被 為多個無法連通的區域時,就發出紅色警報。注意 若該國本來就不完全連通,是 的k個區域,而失去乙個城市並不改變其他城市之間的連通性,則不要發出警報。輸入在第一行給出兩個整數n 0 n 500 和m 5000 分...
PTA 紅色警報 25分
戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被 為多個無法連通的區域時,就發出紅色警報。注意 若該國本來就不完全連通,是 的k個區域,而失去乙個城市並不改變其他城市之間的連通性,則不要發出警報。輸入在第一行給出兩個整數n 0 n 500 和m 5000 分...
紅色警報(25分)
戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被 為多個無法連通的區域時,就發出紅色警報。注意 若該國本來就不完全連通,是 的k個區域,而失去乙個城市並不改變其他城市之間的連通性,則不要發出警報。輸入在第一行給出兩個整數n 0 n 500 和m 5000 分...