求連通分支
如果去掉乙個城市,他的連通分支數變多的話,就是紅色警戒
每次都去求他的連通分支,在**中記住上一次求的連通分支,然後每次迴圈只求一次。
原來的做法:先看這個有多少鄰接點,然後再用他的鄰接點,讓乙個沒有被攻占的鄰接點作為起始點,看有多少鄰接點。
如果沒事,兩次的鄰接點數量應該相差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 分...