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思路大概是從起點開始搜尋鄰接矩陣中能訪問的節點,若到達終點或者沒有下乙個節點可以訪問就返回
1import
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...