高階實驗6 3 1 紅色警報

2021-10-19 09:41:47 字數 1388 閱讀 7662

題目鏈結

思路:利用並查集,每次刪完結點,統計連通塊,如果比原來多了1塊及以上,則說明出現連通塊**,該節點對其他節點有影響,因為我在題目中統計連通塊的方式是遍歷對於所有結點的root陣列,是-1則連通塊加一,但刪除該點後還是會統計到這個點為連通塊,故題目中的判斷是刪後連通塊》原連通塊+1。

#include

#include

#include

#include

using

namespace std;

const

int max =

5e2+5;

int root[max]

;bool _map[max]

[max]

;bool vis[max]

;int n, m;

intfind_root

(int x)

//優化版並查集,會將該節點並到最深入的那個根上

void

union_root

(int a,

int b)

else}}

//將root陣列置為-1,負數代表該節點的子節點個數

void

init

(int n)

intmain()

int k,edge;

for(

int i =

0; i < n; i++)if

(root[i]

<0)

original++

;scanf

("%d"

,& k)

;int k = k;

while

(k--

)for

(int i =

0; i < n; i++

)for

(int j =

0; j < n; j++)if

(_map[i]

[j])

union_root

(i, j)

;for

(int i =

0; i < n; i++)if

(root[i]

<0)

after++;if

(after>original+1)

printf

("red alert: city %d is lost!\n"

,edge)

;else

printf

("city %d is lost.\n"

, edge)

; original = after;

after =0;

}if(k == n)

printf

("game over.");

}

7 9 紅色警報

輸入在第一行給出兩個整數n 0 n 500 和m 5000 分別為城市個數 於是預設城市從0到n 1編號 和連線兩城市的通路條數。隨後m行,每行給出一條通路所連線的兩個城市的編號,其間以1個空格分隔。在城市資訊之後給出被攻占的資訊,即乙個正整數k和隨後的k個被攻占的城市的編號。注意 輸入保證給出的被...

紅色警報(25分)

戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被 為多個無法連通的區域時,就發出紅色警報。注意 若該國本來就不完全連通,是 的k個區域,而失去乙個城市並不改變其他城市之間的連通性,則不要發出警報。輸入在第一行給出兩個整數n 0 n 500 和m 5000 分...

紅色警報 25分

戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被 為多個無法連通的區域時,就發出紅色警報。注意 若該國本來就不完全連通,是 的k個區域,而失去乙個城市並不改變其他城市之間的連通性,則不要發出警報。輸入格式 輸入在第一行給出兩個整數n 0 n 500 和m 5...