TYVJ 1391 走廊潑水節 生成樹

2021-09-02 07:19:55 字數 1595 閱讀 7641

鏈結太長放不下

給定一棵n

nn個節點的樹,要求增加若干條邊,把這棵樹擴充為完全圖,並完全圖的唯一最小生成樹仍然是這棵樹。求增加的邊的權值總和最小是多少。

資料範圍:n

≤6000

n\leq6000

n≤6000

,原有的邊權均為非負整數

首先題目要求完全圖的唯一最小生成樹仍然是這棵樹,所以對於對兩個點集合x

xx,y

yy之間的連邊必須大於原長度,而又要求最小,所以自然是權值+1

那麼我們對於一條邊(x,

y,w)

(x,y,w)

(x,y,w

),設s

xs_x

sx​表示x

xx所在的點集,s

ys_y

sy​表示y

yy所在的點集,而s

xs_x

sx​與s

ys_y

sy​之間必定會新增∣sx

∣+∣s

y∣−1

|s_x|+|s_y|-1

∣sx​∣+

∣sy​

∣−1條邊,而每條邊的長度都為w+1

w+1w+

1,如圖

作圖網頁processon

#include

#include

#include

using

namespace std;

int n,f[

6010

],s[

6010

],t;

long

long ans;

inline

char

getchar()

return

*p1++;}

inline

intread()

inline

void

write

(register

long

long x)

//以上為輸入輸出優化

struct nodeedge[

6010];

inline

bool

cmp(node x,node y)

//排序

inline

intfind

(register

int x)

//判斷所處集合

signed

main()

;sort

(edge+

1,edge+n,cmp)

;for

(register

int i=

1;i<=n;i++

) f[i]

=i,s[i]=1

; ans=0;

for(

register

int i=

1;i)write

(ans)

;putchar(10

);}}

走廊潑水節(TYVJ1391)

演算法 圖論 最小生成樹 分析 題目大意在tyvj上說的不是很清楚,這裡再說明一下,就是說給出了乙個不完全圖 最小生成樹 在這個不完全圖中新增邊使之成為完全圖,同時新增完邊之後必須能保證不破壞原來的最小生成樹。可以採用kruskal解決,我們知道kruskal的最終目的是將兩棵最小生成樹合成一棵,設...

tyvj 1391 走廊潑水節

p1391 走廊潑水節 背景話說,中中帶領的oier們打算舉行一次冬季潑水節,當然這是要秘密進行的,絕對不可以讓中中知道。不過中中可是 湖了,當然很快就發現了我們的小陰謀,於是他準備好水槍迫不及待的想要加入我們了。描述我們一共有n個oier打算參加這個潑水節,同時很湊巧的是正好有n個水龍頭 至於為什...

tyvj1391走廊潑水節 kruskal

題目 大意就是把乙個樹擴充成乙個完全圖,並且圖中最小生成樹仍是原來的樹。思路很巧妙,把邊按權值從小到大排序,然後模擬加邊的過程,並查集記錄左右兩邊連通塊的大小 這樣每新加一條邊合併兩個並查集 完全圖 可知此時兩邊的圖中每個點互相連邊的最優選擇就是連線這兩個圖的那條邊的邊權 1 這樣求最小生成樹時要連...