藍橋杯 風險度量 dfs

2022-09-07 01:33:13 字數 1746 閱讀 1861

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 61 3

2 33 4

3 54 5

5 61 6

則程式應該輸出:

2仔細看這道題,其實就是求兩個節點間的所有路徑,然後判斷哪個節點是必不可少的。

示例中的路徑有兩條

1->3->4->5->6

1->3->5->6

看出3和5節點都是必不可少的,去掉3或者5後1->6無法聯通。

那麼用dfs求出所有路徑,然後判斷有多少節點出現次數跟起始節點一樣多就可以了。

dfs思路大概是從起點開始搜尋鄰接矩陣中能訪問的節點,若到達終點或者沒有下乙個節點可以訪問就返回

1

import

j**a.util.arraylist;

2import

j**a.util.scanner;

3import

j**a.util.stack;45

public

class

t3 25

int q1 =scanner.nextint();

26int q2 =scanner.nextint();

27 dfs(q1 - 1, q2 - 1);

28int z = new

int[n + 1];

29for (int i = 0; i < temp.size(); i++) 34}

35int fin = 0;

36for (int i = 0; i < z.length; i++) 40}

41system.out.println(fin);42}

4344

public

static

void dfs(int n, int

m) 53

temp.add(t);

54 res.pop(); //

彈出頂層

55 visit[n] = 0; //

設定未訪問

56break;57

}58for (int i = 0; i < graph.length; i++) 63}

64}65 res.pop(); //

到這裡說明到了邊界,彈出當前位置

66 visit[n] = 0; //

訪問位重置

67break;68

}69}70

71 }

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

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

藍橋杯 危險係數 DFS

題目大意 抗日戰爭時期,冀中平原的地道戰曾發揮重要作用。地道的多個站點間有通道連線,形成了龐大的網路。但也有隱患,當敵人發現了某個站點後,其它站點間可能因此會失去聯絡。我們來定義乙個危險係數df x,y 對於兩個站點x和y x y 如果能找到乙個站點z,當z被敵人破壞後,x和y不連通,那麼我們稱z為...

藍橋杯 剪格仔(dfs)

由題意可得從左上角的數開始dfs,途徑的數的和等於總和的一半時退出,注意走的時候可以斜著走,當總和為奇數時無法分割,當第乙個數即為總和一半時直接輸出1。include include include using namespace std const int m 15 int m,n,sum 0 i...