hdu 3367 最大生成樹 判環

2021-09-10 23:51:20 字數 568 閱讀 9126

不能最大生成樹+最大的一條邊,但是為什麼呢?

if(fx!=fy) 如果兩棵樹上不是都有回環,那麼可以合併,fx掛在fy上,如果其中乙個有環,fy標記為有環

if(fx==fy&&!(circle[x]+circle[y]) 如果兩棵樹上都沒有回環,那麼x和y還能合併,環數變為1

#include#includeusing namespace std;

const int n=1e5+10;

int fa[n];

int circle[n];

int n,m;

int ans=0;

struct edge

}a[100010];

void init(int n)

}int find(int x)

int main()

else if(fx==fy)

}if(cnt==n) break; //因為有乙個環了,所以總共是n條邊

}printf("%d\n",sum);

}return 0;

}

HDU 3367最大生成樹

不能直接跑最大生成樹,但是還可以存在乙個環,這樣一下就用krusal判環來寫了就是比普通的最大生成樹多了合併判斷。於網路 include include include using namespace std typedef struct nn node node edg 100005 int fa...

hdu 3367 偽森林,not 最大生成樹

感覺題意很扭曲。不是求最大生成樹!給乙個圖,求pseudoforest偽森林,要求每個連通分量最多可以有乙個環。求能構成的最大值。錯誤寫法,求出最大生成樹 最大的邊 正確寫法 在求最大生成樹的思路的基礎上每次判斷一下環的問題 6 7 0 1 9 0 2 6 1 2 8 3 4 5 4 5 5 3 5...

hdu3367最大偽森林(並查集)

題目要求乙個連通圖的最大偽森林,偽森林是乙個最多有乙個迴路的圖。我們只要用kruskal最大生成樹的策略就可以,給根節點表上記號表明這棵樹有沒有負環。其實也有一些貪心的思想。如下 1 include2 using namespace std 3 typedef unsigned int ui 4 t...