風險度量 (判斷聯通性)

2021-08-17 13:07:37 字數 1595 閱讀 3118

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

則程式應該輸出:

並查集

#include#include#include#includetypedef long long ll;

using namespace std;

const int maxn=2010;

int pre[maxn],u[maxn],v[maxn];

/*利用並查集,總感覺有點慢

這道題就是n*m的乙個複雜度

感覺效率不是特別高,還是比較好的

*/ int find_rt(int x)

int main()

int a,b;

scanf("%d %d",&a,&b);

int ra=find_rt(a),rb=find_rt(b);

if(ra!=rb)

int ans=0;

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

int ra=find_rt(a),rb=find_rt(b);

if(ra!=rb) ans++;

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

return 0;

}

bfs判斷聯通

#include#include#include#include#include#includetypedef long long ll;

using namespace std;

const int maxn=2010;

vectorvec[maxn];

int vis[maxn];

int bfs(int st,int ed){

queueq;//千萬注意這個迴圈呼叫的問題,就是有可能會有殘留,導致一直出錯

q.push(st);

vis[st]=1;

while(!q.empty()){

int now=q.front();

if(now==ed) return 1;

q.pop();

for(int i=0;i

邏輯的聯通性

假如有命題p 一定能推出命題q,則稱p 是q 的充分條件,q 是p 的必要條件。特別的,當p 既是q 的充分條件,又是q 的必要條件時,稱p 和q 互為充要條件 現在有n 個命題,其中一些是另一些的充分條件。請問有多少對命題互為充要條件?第一行三個正整數n,m,分別表示命題數 已知關係數 接下來m ...

測試埠聯通性

linux系統測試埠連通性的方法 有四種常用方法 1.telnet 方法 2.wget 方法 3.ssh 方法 4.curl 方法 下面一一介紹。1.telnet 用法 telnet ip port 1 連線不存在的埠 telnet 1.1.1.1 8 trying 1.1.1.1.telnet c...

藍橋杯 風險度量 dfs

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