BZOJ 1060 ZJOI2007 時態同步

2021-08-21 12:54:05 字數 1759 閱讀 7149

time limit: 10 sec memory limit: 162 mb

submit: 3380 solved: 1356

[submit][status][discuss]

description

小q在電子工藝實習課上學習焊接電路板。一塊電路板由若干個元件組成,我們不妨稱之為節點,並將其用數

字1,2,3….進行標號。電路板的各個節點由若干不相交的導線相連線,且對於電路板的任何兩個節點,都存在且僅

存在一條通路(通路指連線兩個元件的導線序列)。在電路板上存在乙個特殊的元件稱為「激發器」。當激發器工

作後,產生乙個激勵電流,通過導線傳向每乙個它所連線的節點。而中間節點接收到激勵電流後,得到資訊,並將

該激勵電流傳向與它連線並且尚未接收到激勵電流的節點。最終,激烈電流將到達一些「終止節點」——接收激勵

電流之後不再**的節點。激勵電流在導線上的傳播是需要花費時間的,對於每條邊e,激勵電流通過它需要的時

間為te,而節點接收到激勵電流後的**可以認為是在瞬間完成的。現在這塊電路板要求每乙個「終止節點」同時

得到激勵電路——即保持時態同步。由於當前的構造並不符合時態同步的要求,故需要通過改變連線線的構造。目

前小q有乙個道具,使用一次該道具,可以使得激勵電流通過某條連線導線的時間增加乙個單位。請問小q最少使用

多少次道具才可使得所有的「終止節點」時態同步?

input

第一行包含乙個正整數n,表示電路板中節點的個數。第二行包含乙個整數s,為該電路板的激發器的編號。接

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

間 output

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

sample input

31 2 1

1 3 3

sample output

2 hint

n ≤ 500000,te ≤ 1000000

樹形dp。可以注意到最後所有的時間其實就是s到葉子結點的最長路。設dp[x]表示以x為節點的最小操作次數,num[x]表示以x節點的最大路線長度。num[x]=max(num[u]+val[i])

dp[x]=dp[u]+num[x]-(num[u]+val[i])

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn = 500005;

inline

int rd()

while(isdigit(ch))

return x*f;

}int n,s,head[maxn],cnt;

ll dp[maxn],num[maxn];

int nxt[maxn<<1],val[maxn<<1],to[maxn<<1];

inline

void add(int bg,int ed,int w)

inline

void dfs(int x,int fa)

for(register

int i=head[x];i;i=nxt[i])

}int main()

dfs(s,0);

printf("%lld",dp[s]);

return

0;}

BZOJ1060 ZJOI2007 時態同步

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

BZOJ1060 ZJOI2007 時態同步

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

BZOJ1060 ZJOI2007 時態同步

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