洛谷 P1330 封鎖陽光大學

2021-07-26 04:59:42 字數 1218 閱讀 9917

曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。

陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路上刷街了。非常悲劇的一點是,河蟹是一種不和諧的生物,當兩隻河蟹封鎖了相鄰的兩個點時,他們會發生衝突。

詢問:最少需要多少只河蟹,可以封鎖所有道路並且不發生衝突。

第一行:兩個整數n,m

接下來m行:每行兩個整數a,b,表示點a到點b之間有道路相連。

僅一行:如果河蟹無法封鎖所有道路,則輸出「impossible」,否則輸出乙個整數,表示最少需要多少只河蟹。

【輸入樣例1】

3 3

1 2

1 3

2 3【輸入樣例2】

3 2

1 2

2 3【輸出樣例1】

impossible

【輸出樣例2】

1【資料規模】

1<=n<=10000,1<=m<=100000,任意兩點之間最多有一條道路。

a[i][0]是記錄關於點i的邊數,a[i][j]是關於i點的第j條邊連向哪個點。

然後開始dfs,從源點開始拓展,將源點染色為1,與源點相連的點(下面稱為二層點,以此類推)染色為2,把與二層點相連的染色為1,與三層點相連的點染色為2,就是不斷的121212……當然,這個時候,如果你發現,從乙個被染色為1的點拓展,發現乙個顏色也為1的點,這就無法染色,也就是題目中的impossible。開變數累計圖中你染色為1的點和染色為2的點的個數,選擇小的累加到ans裡面。

注意,這裡的圖不是全連通的。每個連通圖分開染色,分開累加,而不是一次性地輸出所有連通圖中的色1和色2的較小值

#include 

#define n 10005

using

namespace

std;

int n,m,nn,mm,f[n],a[n][300];

void dfs(int h)

if (!f[a[h][j]])

}

}int main()

for (int i=1;i<=n;i++)

if (!f[i])

printf("%d\n",ans);

return

0;}

洛谷 P 1330 封鎖陽光大學

題目描述 曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與...

洛谷 P1330 封鎖陽光大學

曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是 一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與這些道路...

洛谷 P1330 封鎖陽光大學

題目描述 曹是乙隻愛刷街的老曹,暑假期間,他每天都歡快地在陽光大學的校園裡刷街。河蟹看到歡快的曹,感到不爽。河蟹決定封鎖陽光大學,不讓曹刷街。陽光大學的校園是一張由n個點構成的無向圖,n個點之間由m條道路連線。每只河蟹可以對乙個點進行封鎖,當某個點被封鎖後,與這個點相連的道路就被封鎖了,曹就無法在與...