hdu 4005 邊雙聯通 LCA

2021-06-26 09:12:38 字數 1646 閱讀 2658

題意:

有一幅圖,現在要加一條邊,加邊之後要你刪除一條邊,使圖不連通,費用為邊的費用,要你求的是刪除的邊的最小值的最大值(每次都可以刪除一條邊,選最小的刪除,這些最小中的最大就為答案)

首先要進行縮點,把圖縮為一棵樹,因此,加入一條邊後圖就會存在乙個環,環中的任何一條邊刪除後都不會導致圖不連通

之後找一條最小的邊,可以說這條邊肯定是在加邊之後的連通塊裡的,因為如果不在連通塊裡,那就直接可以把這條最小的邊刪掉,而達不到求出答案的目的

找到邊後,分別從邊的兩點開始遍歷,要遍歷出一條路徑來,並且邊上的權值要盡可能的小,因為這樣才能讓不在環中的邊盡可能的大,然後,答案就是每個節點的次小兒子的最小值,如果沒有次小兒子就不能算(就是說只有乙個兒子,即節點不是三叉的),因為我完全可以把它和最小的邊放到乙個連通塊中,那樣答案就應該更大了。

終上所述:先進行無向圖的縮點,再在樹上找最小的邊,最後分別從邊的兩點出發,遍歷樹,找節點的次小兒子節點中的最小值

舉個簡單的例子(括號內的數字代表邊上的權值)1和8間的權值為1,是最小的

1---8

/           \(3) 

(2)/               \

2                  3

(4) /       \(5)    (6)/      \(7)

4              5     6              7

左子樹中2的子節點有次小值5,右子樹中3的子節點次小值為7,兩個次小值間的最小值是5,即答案

現在,比如所你要把3、4連起來。我可以去掉2、5之間的邊讓圖不連通,花費為5

把3、5連起來,我自然可以刪掉2、4,花費為4,

乙個節點的次小值和最小值(比如說4、5兩點)不可能被同時連進乙個連通塊(或環)中(因為必須把最小的那條邊加進環中),正是利用這個性質,不管把那兩個點連起來,我們都可以找到乙個最小值或次小值來刪掉使圖不連通,注意:再重複一遍,同乙個節點的最小值和次小值不會被加進同乙個環,因此,這些次小值中的最小的那條邊的權值就是答案。(這時你如果把次小的邊加進環中,如2--5,自然可以刪掉一條更小的邊 如2--4 使圖不連通,相反,如果沒有把次小的邊加進去,那次小的就是答案)

#include#include#include#include#includeusing namespace std;

const int maxn = 10010;

int tot,n,m,ans;

const int inf = 999999999;

struct edge

edge[1000005];

int head[maxn],e;

void add(int s,int t,int w)

int btype,time,n,m;

int dfn[maxn],low[maxn],belong[maxn];

int st[maxn],top;

int tt[100010][3],cnt;

inline int min(int a,int b)

int a1,a2,flag;

int main()

{ int i,a,b,w;

while(scanf("%d%d",&n,&m)!=eof)

{memset(head,-1,sizeof(head));e=0;

for(i=0;i

HDU 4587 邊雙聯通

題意 給你n個點,m條邊,要你刪除兩個點以及和這兩個點直接相連的邊,問你剩下的圖中,最大的連通分量的數目。分析 我們可以列舉每個點,然後看剩下的圖中是否有割點,這裡需要注意,乙個單獨的連通分量刪除就沒有了,坑點在這裡!include include include include include u...

邊雙聯通分量

首先什麼是邊雙聯通分量?邊雙連通分量是指,在 無向圖 中刪除任意一條邊依舊聯通的聯通塊 之前講過強連通分量,這裡邊雙聯通分量的做法也需要利用tarjan演算法獲得邊雙聯通分量。對於邊雙聯通分量中還有乙個概念,就是橋。橋指的是 刪除該邊圖不再連通。對應的另乙個概念是 割點 割點的的是 如果除去此節點和...

邊雙聯通分量

noip最後一次學習 敲板子 橋 如果這條邊去掉後圖的聯通分量增加,則這條邊稱為橋。邊雙聯通分量 如果乙個對於乙個圖的某個子圖,任意兩點至少存在兩條 邊不重複 的路徑,則這個子圖是邊雙聯通分量。很顯然,任意乙個邊雙中不含有橋。除橋外每條邊都僅屬於乙個邊雙。如果把原圖中所有橋刪除,每個聯通分量都是原圖...