洛谷P5058 ZJOI2004 嗅探器

2022-05-01 00:48:12 字數 1280 閱讀 2107

某軍搞資訊對抗實戰演習,紅軍成功地侵入了藍軍的內部網路,藍軍共有兩個資訊中心,紅軍計畫在某台中間伺服器上安裝乙個嗅探器,從而能夠偵聽到兩個資訊中心互相交換的所有資訊,但是藍軍的網路相當的龐大,資料報從乙個資訊中心傳到另乙個資訊中心可以不止有一條通路。現在需要你盡快地解決這個問題,應該把嗅探器安裝在哪個中間伺服器上才能保證所有的資料報都能**獲?

輸入格式:

輸入檔案的第一行乙個整數 \(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進行分塊,易證每一塊都是比樹多一條邊的連通圖,每一塊...