風險度量 廣搜,並查集)

2021-07-29 21:53:34 字數 1827 閱讀 6714

x星系的的防衛體系包含 n 個空間站。這 n 個空間站間有 m 條通訊鏈路,構成通訊網。

兩個空間站間可能直接通訊,也可能通過其它空間站中轉。

對於兩個站點x和y (x != y), 如果能找到乙個站點z,使得:

當z被破壞後,x和y無法通訊,則稱z為關於x,y的關鍵站點。

顯然,對於給定的兩個站點,關於它們的關鍵點的個數越多,通訊風險越大。

你的任務是:已知網路結構,求兩站點之間的通訊風險度,即:它們之間的關鍵點的個數。

輸入資料第一行包含2個整數n(2 <= n <= 1000), m(0 <= m <= 2000),分別代表站點數,鏈路數。

空間站的編號從1到n。通訊鏈路用其兩端的站點編號表示。

接下來m行,每行兩個整數 u,v (1 <= u, v <= n; u != v)代表一條鏈路。

最後1行,兩個數u,v,代表被詢問通訊風險度的兩個站點。

輸出:乙個整數,如果詢問的兩點不連通則輸出-1.

例如:

使用者輸入:

7 6

1 3

2 3

3 4

3 5

4 5

5 6

1 6

則程式應該輸出:

2資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗 < 2000ms

廣度優先搜尋:

#include

#include

using

namespace

std;

int vn[1005][1005];

int dist[1005];//儲存當前節點到起始節點的最短距離

int n;

int m;

int u,v,a,b,temp;

void bfs()}}

}int main()

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

cin>>u>>v;//u起始節點,v結束節點

bfs();

int num=dist[v]-dist[u]-1;

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

cout

n)cout

<<"-1";

else

cout

0;}

並查集

#include

using

namespace

std;

int vn[2005][2];

int fa[1005];

int n,m,u,v;

int find(int a)

bool islink(int out)

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

int a=find(vn[i][0]);

int b=find(vn[i][1]);

if (aelse

if (a==b)

;else

fa[a]=b;

}int a=find(u);

int b=find(v);

if (a==b)

return

1; return0;}

int main()

cin>>u>>v;

if (!islink(-1))//當去掉的節點為-1時,相當於不去掉節點

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

if (!islink(i))//去掉節點i,看u,v是否還是聯通的,

total++;

}cout

0;}

2017藍橋杯模擬 風險度量(並查集)

x星系的的防衛體系包含 n 個空間站。這 n 個空間站間有 m 條通訊鏈路,構成通訊網。兩個空間站間可能直接通訊,也可能通過其它空間站中轉。對於兩個站點x和y x y 如果能找到乙個站點z,使得 當z被破壞後,x和y無法通訊,則稱z為關於x,y的關鍵站點。顯然,對於給定的兩個站點,關於它們的關鍵點的...

變形課杭電1181 深搜,廣搜,並查集

problem description 呃 變形課上harry碰到了一點小麻煩,因為他並不像hermione那樣能夠記住所有的咒語而隨意的將乙個棒球變成刺蝟什麼的,但是他發現了變形咒語的乙個統一規律 如果咒語是以a開頭b結尾的乙個單詞,那麼它的作用就恰好是使a物體變成b物體.harry已經將他所會的...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...