某軍搞資訊對抗實戰演習,紅軍成功地侵入了藍軍的內部網路,藍軍共有兩個資訊中心,紅軍計畫在某台中間伺服器上安裝乙個嗅探器,從而能夠偵聽到兩個資訊中心互相交換的所有資訊,但是藍軍的網路相當的龐大,資料報從乙個資訊中心傳到另乙個資訊中心可以不止有一條通路。現在需要你盡快地解決這個問題,應該把嗅探器安裝在哪個中間伺服器上才能保證所有的資料報都能**獲?
輸入格式:
輸入檔案的第一行乙個整數 \(n\),表示藍軍網路中伺服器的數目。
接下來若干行是對藍軍網路的拓撲結構描述,每行是兩個整數 \(i , j\) 表示編號為 \(i\) 和編號為 \(j\) 的兩台伺服器間存在連線(顯然連線是雙向的),伺服器的編號從 \(1\) 開始,一行兩個 \(0\) 表示網路的拓補結構描述結束,再接下來是兩個整數 \(a , b\) 分別表示兩個中心伺服器的編號。
輸出格式:
輸出編號。如果有多個解輸出編號最小的乙個,如果找不到任何解,輸出 no solution
輸入樣例#1:
5
2 12 5
1 45 3
2 35 1
0 04 2
輸出樣例#1:
1
\(1≤n≤100\)
思路:根據割點的定義可以知道,從割點可以到達它所在聯通圖上的任意乙個點,所以只需要找起點和終點之間的割點就可以了。
**:
#include#include#include#define maxn 107
using namespace std;
int a,b,n,head[maxn],x,y,dfn[maxn],num,cnt,low[maxn],js;
int zrj=1020040222;
inline int qread()
struct node e[10007];
inline void ct(int u, int v)
void tarjan(int u)
low[u]=min(low[u],dfn[v]);
}}int main()
a=qread(),b=qread();
tarjan(a);
if(zrj==1020040222) printf("no solution\n");
else printf("%d\n",zrj);
return 0;
}
題解 P5058 ZJOI2004 嗅探器
題目鏈結 題目大意 給定乙個無向圖,求乙個編號最小的點 p 使得刪掉 p 後 s 和 t 不連通 tarjan 演算法 分析 首先我們要明確 點 p 一定是割點,因為只有你刪掉乙個點後圖不連通才有可能使得 s 和 t 不連通,然後我們可以用 tarjan 來做這個事情 常規求割點是什麼,時間戳 df...
P5058 ZJOI2004 嗅探器 割點
一開始看到它的時候,想都沒想直接cv了割點的模板。結果是這樣的 再次讀題,發現是只用找u v路徑上的最小割點,改一下就a了 ac includeusing namespace std const int maxn 1e6 7 struct nodeedge 2 maxn inthead maxn c...
洛谷 P2607 ZJOI2008 騎士
給出一幅有n個點,n條邊的無向未必聯通圖,每乙個點有乙個權並與另外乙個點相連,對其中一些點進行染色,且相鄰兩點的顏色不能都染,則最大的染色點權值和是多少.這題和 洛谷p1453城市環路 很像,區別就在於它不是連通圖.因而可以先用並查集和vector進行分塊,易證每一塊都是比樹多一條邊的連通圖,每一塊...