p1131[zjoi2007]时态同步(代码片段)

${color{Cyan}{talk;is;cheap;;s ${color{Cyan}{talk;is;cheap;;show;me;the;code}}$     2022-12-22     239

关键词:

$\colorcyan>>Question$

题意让我们用最少的代价把叶子节点到根节点的距离调成相同

每次向最长链看齐即可

令$f[u]$表示以$u$为根到叶节点的最长链长度

则$$f[u] = max\left\f[v]+e(u,v)\right\$$

统计答案

$$ans = \sum _v(e(u,v)\in E) f[u]-(f[v]+e(u,v))$$

上代码

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #define ll long long
 6 using namespace std; 
 7 
 8 template <typename T> void in(T &x) 
 9     x = 0; T f = 1; char ch = getchar();
10     while(!isdigit(ch)) if(ch == -) f = -1; ch = getchar();
11     while( isdigit(ch)) x = 10 * x + ch - 48; ch = getchar();
12     x *= f;
13 
14 
15 template <typename T> void out(T x) 
16     if(x < 0) x = -x , putchar(-);
17     if(x > 9) out(x/10);
18     putchar(x%10 + 48);
19 
20 //-------------------------------------------------------
21 
22 const int N = 5e5+7;
23 
24 int n,s;
25 ll ans,f[N];
26 
27 struct edge 
28     int v,w,nxt;
29     edge(int v = 0,int w = 0,int nxt = 0):v(v),w(w),nxt(nxt);
30 e[N<<1]; int head[N],e_cnt;
31 
32 void add(int u,int v,int w) 
33     e[++e_cnt] = edge(v,w,head[u]); head[u] = e_cnt;
34 
35 
36 void dfs(int u,int fa) 
37     int i;
38     int max_e = 0;
39     for(i = head[u]; i;i = e[i].nxt) 
40         int v = e[i].v; if(v == fa) continue;
41         dfs(v,u);
42         f[u] = max(f[u],f[v]+e[i].w);
43     
44     for(i = head[u]; i;i = e[i].nxt) 
45         int v = e[i].v; if(v == fa) continue;
46         ans += f[u] - (f[v]+e[i].w);
47     
48 
49 
50 int main() 
51     int i,u,v,w;
52     in(n); in(s);
53     for(i = 1;i < n; ++i) 
54         in(u); in(v); in(w);
55         add(u,v,w); add(v,u,w);
56     
57     dfs(s,0);
58     out(ans);
59     return 0;
60 

 

p1131[zjoi2007]时态同步(代码片段)

P1131[ZJOI2007]时态同步题意:有一颗树,有一个点是激发器,从这个点开始可以产生一个激励电流,通过导线传向每一个它所连接的节点,经过一个边的花费为w[i],你有一个道具,每用一次可以让一个边的花... 查看详情

p1131[zjoi2007]时态同步(代码片段)

$\colorcyan>>Question$题意让我们用最少的代价把叶子节点到根节点的距离调成相同每次向最长链看齐即可令$f[u]$表示以$u$为根到叶节点的最长链长度则$$f[u]=max\left\f[v]+e(u,v)\right\$$统计答案$$ans=\sum_v(e(u,v)\inE)f[u]-(f[v]+e(u,v))$$上代码... 查看详情

p1131[zjoi2007]时态同步树形dp(代码片段)

  题目描述小QQ在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3…1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两... 查看详情

洛谷p1131[zjoi2007]时态同步

P1131[ZJOI2007]时态同步 题目描述小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板... 查看详情

p1131[zjoi2007]时态同步(代码片段)

P1131[ZJOI2007]时态同步树形DP题意描述有一棵树,有n个节点,n-1条边,每条边都有一个权值。要求每个叶子结点到根节点的边权相同,求最少的改动数量(不是次数)看不懂的话,走传送门算法分析很显然是DP(我也不知道是怎么... 查看详情

洛谷p1131[zjoi2007]时态同步

题目描述小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在... 查看详情

p1131[zjoi2007]时态同步(代码片段)

串松门标签是树形dp,但其实没啥必要用dp。显然数据给出的是树形结构,要求所有叶子节点到根节点路径长度相同,可以想到自下向上地进行维护。首先从根节点dfs,找到叶子节点后向上回溯,先维护父节点的所有子节点到父... 查看详情

洛谷p1131bzoj1060[zjoi2007]时态同步

题目描述小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在... 查看详情

1060:[zjoi2007]时态同步(代码片段)

TimeLimit: 10Sec  MemoryLimit: 162MBSubmit: 3610  Solved: 1521[Submit][Status][Discuss]Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3&helli 查看详情

[zjoi2007]时态同步(代码片段)

这个题。。。一眼树形DP???我们通过模拟几组数据可以发现。。。其实只需要保证每一棵树的边权之和加起来相等。。。那么这些子树组成的一棵大树。。。就是最终我们要求的。。。既然这样。。。我们第一遍需要从叶子... 查看详情

时态同步[zjoi2007](代码片段)

题目描述小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在... 查看详情

bzoj1060:[zjoi2007]时态同步——题解(代码片段)

http://www.lydsy.com/JudgeOnline/problem.php?id=1060https://www.luogu.org/problemnew/show/P1131小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若... 查看详情

bzoj1060[zjoi2007]时态同步(代码片段)

传送门Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,... 查看详情

[zjoi2007]时态同步(dfs+贪心)(代码片段)

小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3.进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条... 查看详情

b1060[zjoi2007]时态同步dfs(代码片段)

两遍dfs,第一遍有点像找重链,第二遍维护答案,每个点维护一个当前深度,然后就没啥了。ps:memset(lst,-1,sizeof(lst));这一句多余的话让我debug半天。。。题干:Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由... 查看详情

bzoj1060:[zjoi2007]时态同步树形dp(代码片段)

可能算不上dp,大概是个树形模拟先一遍dfs算出f[u]为每个点最深的叶子到u的距离,然后再dfs一下,ans加上f[u]-f[e[i].to]-e[i].va,f[u]-f[e[i].to]是这条边应该的用时#include<iostream>#include<cstdio>usingnamespacestd;constintN=500005;intn,m,cnt,f... 查看详情

[树形dp]luogup1131[zjoi2007]时态同步(代码片段)

https://www.luogu.org/problemnew/show/P1131分析我们设t[i]为以i为根的子树中需要最久达到的点所需的时间那么我们容易用一次DFS预处理出来,再DFS记录深入到当前点已经加过k次,ans=Σ(t[rt]-t[u]-k),k=t[rt]-t[u] #include<iostream>#include&... 查看详情

[zjoi2007]时态同步

1060:[ZJOI2007]时态同步TimeLimit:10Sec  MemoryLimit:162MBSubmit:2629  Solved:880[Submit][Status][Discuss]Description  小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….... 查看详情