BZOJ1060 ZJOI2007 時態同步

2022-03-29 17:11:31 字數 1702 閱讀 7616

bzoj1060: [zjoi2007]時態同步

小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

首先,所有的節點組成了一顆有根樹,根為$root$,也就是激發器。

所以樹形$dp$。

設$dp[i]$表示從第$i$個節點發出激勵電流,在$i$的子樹裡達到時態同步最少需要操作的次數。

再設乙個輔助陣列$f[i]$表示從第$i$個節點發出激勵電流,在$i$的子樹裡達到時態同步的操作次數達到最少時,從第$i$個節點到達葉子節點需要的時間。

轉移方程:

$$f[i]=\max\\ |\ j\in son_i\ \}$$

$$dp[i]=\sum_(dp[j]+f[i]-(f[j]+w_))$$

其中,$w_$表示$i,j$之間的邊的時間。

最終答案就是$dp[root]$。

附**:

#include#include#include#define maxn 500010

using namespace std;

int n,root,c=1;

int head[maxn],deep[maxn];

long long f[maxn],dp[maxn];

struct treea[maxn<<1];

inline int read()

while(c>='0'&&c<='9')

return date*w;

}inline void add_edge(int u,int v,int w)

void dfs(int rt)

}for(int i=head[rt];i;i=a[i].next)

}void work()

deep[root]=1;

dfs(root);

printf("%lld\n",dp[root]);

}int main()

BZOJ 1060 ZJOI2007 時態同步

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

BZOJ1060 ZJOI2007 時態同步

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

BZOJ1060 ZJOI2007 時態同步

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