L2 013 紅色警報 DFS 連通分支數

2021-10-08 07:08:18 字數 1553 閱讀 2748

求連通分支

如果去掉乙個城市,他的連通分支數變多的話,就是紅色警戒

每次都去求他的連通分支,在**中記住上一次求的連通分支,然後每次迴圈只求一次。

原來的做法:先看這個有多少鄰接點,然後再用他的鄰接點,讓乙個沒有被攻占的鄰接點作為起始點,看有多少鄰接點。

如果沒事,兩次的鄰接點數量應該相差1

注:上面說鄰接點不準確,應該是可以到達的點

#include

#include

#include

using

namespace std;

vectorint>> rode;

vector<

int> vis, flag, ans;

// 經過某乙個分支

void

dfs(

int k)

}int n, m;

// 求連通分支數

intget()

}return cnt;

}int

main()

cin >> m;

// 放每次操作的連通分支數,用這個存,處理更方便

ans.

push_back

(get()

);while

(m--

)else}if

(ans.

back()

==0)printf

("game over.\n");

return0;

}

#include

#include

#include

#include

using

namespace std;

vectorint>> rode;

vector<

int> vis;

int n;

int cnt =0;

// 可以到達的點的數量

void

dfs(

int k)

}vector<

int> dp;

// 重新整理

void

clear()

intmain()

cin >> m;

while

(m--

)clear()

;// 先看沒刪除之前,有多少點

dfs(x)

;int cnt_2 = cnt;

dp.push_back

(x);

clear()

;if(rode[x]

.empty()

)// 刪除之後

// 找乙個沒有被攻占的鄰接點

for(

auto e : rode[x])if

(vis[e]==0

)if(cnt == cnt_2 -1)

else

printf

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

, x);}

return0;

}

L2 013 紅色警報 (DFS計算連通分量)

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被 為多個無法連通的區域時,就發出紅色警報。注意 若該國本來就不完全連通,是 的k個區域,而失...

L2 013 紅色警報(dfs)

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 戰爭中保持各個城市間的連通性非常重要。本題要求你編寫乙個報警程式,當失去乙個城市導致國家被 為多個無法連通的區域時,就發出紅色警報。注意 若該國本來就不完全連通,是 的k個區域,而失...

L2 013 紅色警報

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