題解 P5058 ZJOI2004 嗅探器

2022-05-07 21:39:10 字數 834 閱讀 5181

題目鏈結

題目大意:給定乙個無向圖,求乙個編號最小的點\(p\),使得刪掉\(p\)後\(s\)和\(t\)不連通

\(tarjan\)演算法

分析:首先我們要明確:點\(p\)一定是割點,因為只有你刪掉乙個點後圖不連通才有可能使得\(s\)和\(t\)不連通,然後我們可以用\(tarjan\)來做這個事情

常規求割點是什麼,時間戳\(dfn\),不經過樹邊可以到達的最小時間戳\(low\)

如果存在\(u\)以及它的子節點\(v\),如果有\(dfn[u] \leq low[v]\)那麼\(u\)就是割點,因為去掉\(u\)後以\(v\)為根的子樹就和圖不連通了

所以我們以\(s\)為根做\(tarjan\),只要在\(u\)是割點時判斷一下\(t\)在不在以\(v\)為根的子樹內就好了,這個顯然是\(dfn[v] \leq dfn[t]\)

#include #include #include using namespace std;

const int maxn = 128;

inline int read()

vectorg[maxn];

inline void addedge(int from,int to)

int dfn[maxn],low[maxn],tot,s,t,n,ans = 0x7fffffff;

void tarjan(int u,int faz)else if(v != faz && dfn[v])low[u] = min(low[u],dfn[v]);

}}int main()

P5058 ZJOI2004 嗅探器 割點

一開始看到它的時候,想都沒想直接cv了割點的模板。結果是這樣的 再次讀題,發現是只用找u v路徑上的最小割點,改一下就a了 ac includeusing namespace std const int maxn 1e6 7 struct nodeedge 2 maxn inthead maxn c...

洛谷P5058 ZJOI2004 嗅探器

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

ZJOI 2004 嗅探器 題解

題目傳送門 題目大意 給出一張無向圖以及兩個點 stst st和 eded ed,找出乙個編號最小的並且在所有st 到 ed 的路徑上的點。顯然這個點是乙個割點嘛。於是我們找出所有滿足要求的割點中編號最小的即可。具體就看 吧 include include define maxn 110 int n...