1. 程式人生 > >ZJOI/Lnsyoj158/Luogu1131時態同步(樹形DP水題)【做題報告】

ZJOI/Lnsyoj158/Luogu1131時態同步(樹形DP水題)【做題報告】

rt,是一道很水的樹形DP

題目描述

給出一棵有根樹,每條邊有一個通過時間。你可以進行一次“操作”,使得某條邊的通過時間增加一秒。 你需要讓根節點到每個葉節點的所需時間都相等,且“操作”次數最少。 葉節點被定義為除根節點外所有隻與一個點相連的節點。

輸入格式

第一行一個正整數NN,表示樹上的節點個數。 第二行一個正整數SS,表示根節點的編號。 接下來N1N−1行每行三個數a[i],b[i]a[i],b[i]和t[i]t[i],表示第ii條邊連線節點a[i]a[i]和b[i]b[i],通過時間為

t[i]">t[i]t[i]。

輸出格式

輸出一行一個非負整數,表示最小“操作”次數。

樣例一

input

3
1
1 2 1
1 3 3

output

2

樣例解釋

對第一條邊進行兩次“操作”即可。

限制與約定

對於30%的資料,n510

對於60%的資料,n5000

對於100%的資料,

t[i]≤106">n5105t[i]106

時間限制1s

空間限制256MB

這道題思路就是用一個num[i]以i為根的子樹改成了什麼邊權,dp[i]儲存運算元即答案;

然後轉移就很簡單了

dp[now]+=dp[to];
num[now]=max(num[now],num[to]+edge[i].val);

dp[now]+=num[now]-(num[to]+edge[i].val);

對就醬,就這麼水,但是我並沒有很快就想到,

還有還有要開longlong!!

這道題其實沒有省選難度,很適合練手;