LuoguP1131 ZJOI2007 時態同步

2021-09-10 01:53:33 字數 2049 閱讀 2566

小q在電子工藝實習課上學習焊接電路板。一塊電路板由若干個元件組成,我們不妨稱之為節點,並將其用數字1,2,3…1,2,3….進行標號。電路板的各個節點由若干不相交的導線相連線,且對於電路板的任何兩個節點,都存在且僅存在一條通路(通路指連線兩個元件的導線序列)。

在電路板上存在乙個特殊的元件稱為「激發器」。當激發器工作後,產生乙個激勵電流,通過導線傳向每乙個它所連線的節點。而中間節點接收到激勵電流後,得到資訊,並將該激勵電流傳向與它連線並且尚未接收到激勵電流的節點。最終,激烈電流將到達一些「終止節點」――接收激勵電流之後不再**的節點。

激勵電流在導線上的傳播是需要花費時間的,對於每條邊,激勵電流通過它需要的時間為t,而節點接收到激勵電流後的**可以認為是在瞬間完成的。現在這塊電路板要求每乙個「終止節點」同時得到激勵電路――即保持時態同步。由於當前的構造並不符合時態同步的要求,故需要通過改變連線線的構造。目前小q有乙個道具,使用一次該道具,可以使得激勵電流通過某條連線導線的時間增加乙個單位。請問小q最少使用多少次道具才可使得所有的「終止節點」時態同步?

輸入格式:

第一行包含乙個正整數n,表示電路板中節點的個數。

第二行包含乙個整數s,為該電路板的激發器的編號。

接下來n-1行,每行三個整數a , b , t。表示該條導線連線節點a與節點b,且激勵電流通過這條導線需要t個單位時間。

輸出格式:

僅包含乙個整數v,為小q最少使用的道具次數。

輸入樣例#1:31

1 2 1

1 3 3

輸出樣例#1:

說明對於40%的資料,n ≤ 1000

對於100%的資料,n ≤ 500000

對於所有的資料,t(e) ≤ 1000000

作者注:

按理說應該用樹形dp來解的,但經一位dalao點撥,發現了一種巧解。

因為該道具只能增加時間,故最終同步的時態應以最長時間為標準。本蒟蒻一開始還沒理解。

dp模組:

注意這三步的順序!!!

先一直dp到樹的最底層。即dp(to,now);先找每個最底層子樹中(時間)最長的一條邊。即maxd=max(maxd,e[i].t);該子樹其他邊應相應增加至該長度,於是將答案加上最長邊與每條邊的差,即ans=ans+maxd-e[i].t;將父親連向該子樹的邊權加上該子樹的最大邊。即e[i].t+=maxd;為的是將其父親所在子樹的各個邊又進行第一二步的操作,直到進行到整個樹,這樣所有的「終止節點」時態即可同步。蒟蒻我摳了一下午腦殼

#include

#define read read()

#define ll long long

using namespace std;

const

int maxn=

500005

;long

long n,s,size,ans;

int head[maxn]

;inline

int read//快讀

while

(ch>=

'0'&&ch<=

'9')

return x=x*f;

}struct edge

e[maxn<<2]

;void

addedge

(int u,

int v,

int t)

//鄰接表存雙向邊

void

readdata()

}voiddp(

int now,

int fa)

for(

int i=head[now]

;~i;i=e[i]

.nxt)

for(

int i=head[now]

;~i;i=e[i]

.nxt)

for(

int i=head[fa]

;~i;i=e[i]

.nxt)

//注意,這個迴圈的條件與前幾個不同,想一想,為什麼}}

intmain()

P1131 ZJOI2007 時態同步

小q在電子工藝實習課上學習焊接電路板。一塊電路板由若干個元件組成,我們不妨稱之為節點,並將其用數字1,2,3 進行標號。電路板的各個節點由若干不相交的導線相連線,且對於電路板的任何兩個節點,都存在且僅存在一條通路 通路指連線兩個元件的導線序列 在電路板上存在乙個特殊的元件稱為 激發器 當激發器工作後...

P1131 ZJOI2007 時態同步

小 q在電子工藝實習課上學習焊接電路板。一塊電路板由若干個元件組成,我們不妨稱之為節點,並將其用數字 1,2,3 進行標號。電路板的各個節點由若干不相交的導線相連線,且對於電路板的任何兩個節點,都存在且僅存在一條通路 通路指連線兩個元件的導線序列 在電路板上存在乙個特殊的元件稱為 激發器 當激發器工...

P1131 ZJOI2007 時態同步

樹形dp 有一棵樹,有 n 個節點,n 1 條邊,每條邊都有乙個權值。要求每個葉子結點到根節點的邊權相同,求最少的改動數量 不是次數 看不懂的話,走傳送門 很顯然是 dp 我也不知道是怎麼想到的 我們可以想一想,如果從根節點出發,向下維護會有諸多不便。所以我們可以倒著思考,從每乙個葉子結點開始進行維...