BZOJ1060 ZJOI2007 時態同步

2022-02-06 01:32:51 字數 1787 閱讀 3436

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

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

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

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

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

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

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

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

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

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

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

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

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

1 2 1

1 3 3

2n ≤ 500000,te ≤ 1000000

其實還是很水的。

設$\large f[i]$表示以i為根的字數的葉子的時態同步的最小花費。

怎麼轉移?

貪心地想,我們肯定要讓$x$的所有子樹的同步時態和$x$的所有子樹中同步後的時態最長的一樣就行了。

所以設$tmp$為$x$的所有子樹中的同步時態最長的。

那麼$\large f[i] += f[j] + tmp - g[j]$,其中$\large g[j]$表示以j為根的子樹的最大時態。

最後把所有的$g[j]$改成$tmp$就行了。

其實一開始寫對了然後和大樣例一直不對調了好久, 最後發現沒開long long

#include #include 

using

namespace

std;

#define reg register

#define int long longinline

intread()

#define n 500005

intn, s;

struct

edge ed[n*2

];int

head[n], cnt;

intdeg[n];

inline

void add(int x, int y, intz);

head[x] =cnt;

deg[y] ++;

}int

f[n], g[n];

intdis[n];

void dfs(int x, int fa, intd)}

void dp(int x, int

fa)

for (reg int i = head[x] ; i ; i =ed[i].nxt)

}signed main()

dfs(s,

0, 0

); dp(s, 0);

printf(

"%lld\n

", f[s]);

return0;

}

BZOJ 1060 ZJOI2007 時態同步

time limit 10 sec memory limit 162 mb submit 3380 solved 1356 submit status discuss description 小q在電子工藝實習課上學習焊接電路板。一塊電路板由若干個元件組成,我們不妨稱之為節點,並將其用數 字1,2,...

BZOJ1060 ZJOI2007 時態同步

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

BZOJ1060 ZJOI2007 時態同步

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