牛客小白月賽23 樹上求和(思維)

2021-10-05 01:55:59 字數 1069 閱讀 6814

有一棵包含n個節點和n-1條邊的樹,規定樹鏈(u,v)為樹上從u到v的簡單路徑。

樹的每條邊上都有乙個正整數,這個正整數被稱作這條邊的顏色,規定一條樹鏈的權值w(u,v)為這條樹鏈上所有邊的顏色的代數和。

而整棵樹的權值為所有不同的樹鏈的權值的代數和。

已知所有邊的顏色集合恰好為1到n-1這n-1個不同的正整數,請你為每條邊安排一種顏色,使得這棵樹的權值盡量小,你不需要給出具體方案,只需要求出這個最小的權值即可。

測試資料第一行,是乙個正整數n(1 \le n \le 10^5)n(1≤n≤10

5),表示樹的節點個數

接下來n-1行,每行兩個用空格隔開的整數u,v,表示樹上有一條邊連線u和v

乙個整數,表示了這棵樹的最小的權值。輸入4

1 22 3

3 4輸出

19

這題是求一條樹鏈被經過的次數,而經過的次數等於左右兩邊的結點數之積(結點數從1開始數)。

#include

using

namespace std;

typedef

long

long ll;

const

int maxn=

1e5+5;

vector a[maxn]

;ll w[maxn]

;ll cnt=

0,n;

ll dfs

(ll u,ll v)

w[++cnt]

=sum*

(n-sum)

;return sum;

}int

main()

dfs(1,

-1);

sort

(w+1

,w+1

+cnt)

;//cnt為結點個數

ll ans=0;

for(ll i=

1;i<=cnt;i++

) cout

}

牛客小白月賽23 G 樹上求和 題解(貪心)

其實這題自己有思路了,但是最後沒寫 卻去看了題解實屬不該。這題其實和周賽的一題很相似都是求貢獻 相似的周賽題 此題需要從算貢獻的角度思考,對於每條邊對答案的貢獻,等於其左邊子樹結點個數 右邊子樹結點個數 邊長。因此我們先隨便從一點dfs,預處理出每個子樹的結點個數。再遍歷所有的邊。把左邊子樹結點個數...

牛客小白月賽24 I 求和

題目鏈結 已知有 n nn 個節點,有 n 1 n 1n 1 條邊,形成乙個樹的結構。給定乙個根節點 k kk,每個節點都有乙個權值,節點i的權值為 v iv i vi 給 m mm 個操作,操作有兩種型別 第一行給出三個正整數 n,m k n,m,k n,m,k,表示樹的節點數 操作次數 和這棵樹...

牛客小白月賽23 B 階乘

給定乙個正整數 p 求乙個最小的正整數 n,使得 n 是 p 的倍數 第一行輸入乙個正整數t表示測試資料組數 接下來t行,每行乙個正整數p 輸出t行,對於每組測試資料輸出滿足條件的最小的n 412 48124 4這題要用到質因數分解,題解用了二分,其實用不用無所謂,首先,我們知道階乘是幾個數的乘積,...