1. 程式人生 > >[ZJOI 2007]時態同步

[ZJOI 2007]時態同步

out desc 接下來 n-1 set const namespace mat 我們

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

3
1
1 2 1
1 3 3

Sample Output

2

HINT

N ≤ 500000,te ≤ 1000000

題解

簡單的樹形DP。

以S為根,建樹。

顯然我要保證全體時態同步,就要保證每棵子樹的時態同步。

對於每個節點,遍歷所有子樹,找出路徑最長的,對於其他子樹求個差值,相加即可。

 1 #include<set>
 2 #include<map>
 3 #include<ctime>
 4 #include<cmath>
 5 #include<queue>
 6
#include<stack> 7 #include<cstdio> 8 #include<string> 9 #include<vector> 10 #include<cstring> 11 #include<cstdlib> 12 #include<iostream> 13 #include<algorithm> 14 #define LL long long 15 #define RE register 16 #define IL inline 17 using namespace std; 18 const LL N=500000; 19 20 LL n,s,u,v,c,ans; 21 struct tt 22 { 23 LL to,cost,next; 24 }edge[N*2+5]; 25 LL path[N+5],top; 26 IL void Add(LL u,LL v,LL c); 27 28 LL Dfs(LL r,LL fa,LL c); 29 30 int main() 31 { 32 scanf("%lld%lld",&n,&s); 33 for (RE LL i=1;i<n;i++) 34 { 35 scanf("%lld%lld%lld",&u,&v,&c); 36 Add(u,v,c); 37 Add(v,u,c); 38 } 39 Dfs(s,0,0); 40 printf("%lld\n",ans); 41 return 0; 42 } 43 44 IL void Add(LL u,LL v,LL c) 45 { 46 edge[++top].to=v; 47 edge[top].next=path[u]; 48 edge[top].cost=c; 49 path[u]=top; 50 } 51 LL Dfs(LL r,LL fa,LL c) 52 { 53 LL cnt=0,tol=0,maxn=0; 54 for (RE LL i=path[r];i;i=edge[i].next) if (edge[i].to!=fa) 55 { 56 cnt++; 57 LL tmp=Dfs(edge[i].to,r,edge[i].cost); 58 if (tmp>maxn) maxn=tmp; 59 tol+=tmp; 60 } 61 ans+=maxn*cnt-tol; 62 return maxn+c; 63 }

[ZJOI 2007]時態同步