有一棵包含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≤105),表示樹的節點個數
接下來n-1行,每行兩個用空格隔開的整數u,v,表示樹上有一條邊連線u和v
乙個整數,表示了這棵樹的最小的權值。輸入4這題是求一條樹鏈被經過的次數,而經過的次數等於左右兩邊的結點數之積(結點數從1開始數)。1 22 3
3 4輸出
19
#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這題要用到質因數分解,題解用了二分,其實用不用無所謂,首先,我們知道階乘是幾個數的乘積,...