題解 ZJOI2007 時態同步(樹形結構)

2022-02-19 19:12:08 字數 1920 閱讀 7220

*為何要寫dp?,不是擺明的水題嗎 *

description

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

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

激勵電流在導線上的傳播是需要花費時間的,對於每條邊e,激勵電流通過它需要的時間為t

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

input

root + 一棵樹

output

乙個整數表示最低次數

in.131

1 2 1

1 3 3

out.1

2資料範圍與約定

對於100%資料,n<=1e5 , t<=1e6

主要思路

由於邊值只能增不能減,我們考慮自底向上對每個節點 i 進行處理,i 向非 fa 節點連的邊一定等長 , 否則無論如何都不能滿足 。 我們只要對每個節點求出其兒子的 max 值,並更新其他兒子 , 更新之差的總和就是答案 。

細節:

注意dis開 long long

要不斷用 dis 更新 , 不能只用該點所連的邊權 w[ i ] ,因為兒子節點到其對應的葉節點的距離並不相同

錯誤**

void  dfs( int u , int fa )

ans += ma*cnt - sum ;

}

正確寫法

void  dfs( int u , int fa )

dis[ u ] = ma ; //更新dis[ u ]

for( int i = head[ u ] ; i ; i = nex[ i ] )

}

#includeusing namespace std ;

#define ll long long

const int maxn = 500005 ;

inline int read()

int n , root , to[ maxn*2 ] , nex[ maxn*2 ] , head[ maxn ] , w[ maxn*2 ] , tot = 1;

ll ans = 0ll , dis[ maxn ];

void add( int x , int y , int z)

void dfs( int u , int fa )

dis[ u ] = ma ;

for( int i = head[ u ] ; i ; i = nex[ i ] )

}int main()

dfs( root , root ) ;

cout

}

ZJOI2007 時態同步

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

ZJOI2007 時態同步

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

ZJOI2007 時態同步

傳送門 這道題目有點水啊,只要深搜到葉子節點,然後回溯,找出乙個點到它的兒子節點的最大距離,ans ans ans 最大距離 到每個兒子節點距離,最後記得把它父親節點到它的距離加上之前所求的最大距離。include define il inline define ll long long defin...