BZOJ原题链接

洛谷原题链接

看上去就觉得是一道树形\(\mathtt{DP}\),不过到头来我发现我写了一个贪心。。

显然对越靠近根(记为\(r\))的边进行加权贡献越大,且同步的时间显然是从根到各个叶子节点的时间中的最大值。

于是先求出同步的时间,记\(f[x]\)表示从根到以\(x\)节点为根的子树中的各个叶子节点的时间中的最大值。

显然\(f[x] = \max\limits^{y\in son_x} f[y]\),而\(f[x]\)初始化为它父亲到它的边的边权\(+f[\text{父亲}]\)。

这个只需要\(dfs\)一遍即可求出。

然后从根开始往叶子节点贪心的去加边权,同样使用\(dfs\)来完成。

对于一个节点\(x\),若\(f[x]<f[r]\),则表示从根到以它为根的子树中的各个叶子节点的时间中的最大值都未能同步,那么就将\(x\)到它父亲的边权加上\(k = f[r] - f[x]\),使得最远的那个叶子节点的时间同步。

因为给到父亲的边加了边权,那么后面的点都受到影响,需将\(k\)累加到\(x\)的子节点的\(f\)值中,注意一条路径上的\(k\)是会不断累加的。

然后就这样搜下去,最后的答案就是每次给边加权的累计。

注意开\(\mathtt{long\ long}\)。

#include<cstdio>
using namespace std;
typedef long long ll;
const int N = 5e5 + 10;
const int M = N << 1;
int fi[N], da[M], di[M], ne[M], l, ro;
ll f[N], s;
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
inline ll maxn(ll x, ll y) { return x > y ? x : y; }
inline void add(int x, int y, int z)
{
di[++l] = y; da[l] = z; ne[l] = fi[x]; fi[x] = l;
di[++l] = x; da[l] = z; ne[l] = fi[y]; fi[y] = l;
}
void dfs_1(int x, int fa)
{
int i, y; ll ma = f[x];
for (i = fi[x]; i; i = ne[i])
if ((y = di[i]) ^ fa)
{
f[y] = da[i] + f[x];
dfs_1(y, x);
ma = maxn(ma, f[y]);
}
f[x] = ma;
}
void dfs_2(int x, int fa, ll k)
{
int i, y;
s += f[ro] - f[x]; k += f[ro] - f[x];
for (i = fi[x]; i; i = ne[i])
if ((y = di[i]) ^ fa)
f[y] += k, dfs_2(y, x, k);
}
int main()
{
int i, n, x, y, z;
n = re(); ro = re();
for (i = 1; i < n; i++)
{
x = re(); y = re(); z = re();
add(x, y, z);
}
dfs_1(ro, 0); dfs_2(ro, 0, 0);
printf("%lld", s);
return 0;
}

BZOJ1060或洛谷1131 [ZJOI2007]时态同步的更多相关文章

  1. 洛谷 1131 [ZJOI2007] 时态同步

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

  2. 洛谷 1131 [ZJOI2007]时态同步——树形dp

    题目:https://www.luogu.org/problemnew/show/P1131 因为越高,调节一个影响到的越多,所以底下只要把子树间的差异消除了就行了,与其他部分的差异由更高的边调节. ...

  3. 洛谷 P1131 [ZJOI2007]时态同步

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

  4. [洛谷P1131][ZJOI2007]时态同步

    题目大意:给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共增加多少边权. 题解:树形$DP$,对于每个点,如果它到它的子树中的叶子节点距离不同,一定要在这 ...

  5. 洛谷 P1131 [ZJOI2007]时态同步 树形DP

    题目描述 分析 我们从根节点开始搜索,搜索到叶子节点,回溯的时候进行维护 先维护节点的所有子节点到该节点最大边权(边权为叶子节点到同时到达它所需要时间) 然后维护答案,答案为最大边权减去所有到子节点的 ...

  6. 【BZOJ1060】[ZJOI2007]时态同步 树形DP

    [BZOJ1060][ZJOI2007]时态同步 Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3-.进行标号.电路 ...

  7. bzoj千题计划163:bzoj1060: [ZJOI2007]时态同步

    http://www.lydsy.com/JudgeOnline/problem.php?id=1060 以激发器所在节点为根 终止节点一定是叶节点 记录点的子树内最深的终止节点 然后从根往下使用道具 ...

  8. 洛谷 P1169 [ZJOI2007]棋盘制作

    2016-05-31 14:56:17 题目链接: 洛谷 P1169 [ZJOI2007]棋盘制作 题目大意: 给定一块矩形,求出满足棋盘式黑白间隔的最大矩形大小和最大正方形大小 解法: 神犇王知昆的 ...

  9. BZOJ 1060: [ZJOI2007]时态同步( 树形dp )

    坑爹...数据是错的..详见discuss  http://www.lydsy.com/JudgeOnline/wttl/wttl.php?pid=1060 先求根到叶子的距离最大值x, 然后把所有叶 ...

随机推荐

  1. 小说美句摘抄&&动漫壁纸

    不知道为啥脑子一抽打算开个坑(反正咱是个不务正业的人) 大部分是网文里的,某些是轻小说里的,文学名著--咱也不像会看那个的人啊-- upd 2019.11.6:把一些自己觉得好的动漫壁纸贴一贴,图床用 ...

  2. linux中的目录

    Linux文件系统数如下: 在 Linux 系统中,文件系统通过目录"包含"子目录及文件的方式,来组织成一个树状结构.那么目录到底是如何"包含"其他目录及文件的 ...

  3. python 启动pydoc查看文档

    启动pydoc查看文档 python3 -m pydoc -p 访问http://localhost:6789 或者查看官方文档:https://seleniumhq.github.io/seleni ...

  4. 第10组 团队Git现场编程实战

    组员职责分工 姓名 分工 童景霖 博客 朱晓倩 制作UI 万本琳 制作UI 唐怡 制作UI 陈心怡 制作UI 黄永福 测评福州最受欢迎的商圈.后期代码修改和完善 郑志强 测评各个价位的前五美食餐厅代码 ...

  5. [web] 前端一些细节

    作者:水落斜阳链接:https://www.jianshu.com/p/7a8124fdf945来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1, reflow和re ...

  6. PHP系列 | Thinkphp3.2 上传七牛 bad token 问题 [ layui.upload 图片/文件上传]

    前端代码 <div class="logo_out" id="upload-logo"></div> JS代码 /** * 上传图片 * ...

  7. JVM探究之 —— 类加载器-双亲委派模型

    虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代码模块称为“类加载器 ...

  8. buddo源码分析-transport组件之Netty(一)

    dubbo 2.5.10 版本,netty仍然使用的是netty的3.10.5版本,我们从下面的代码可以看出,SPI默认使用的是“netty”,而不是“netty4”. package com.ali ...

  9. KCP TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间)

    http://www.skywind.me/blog/archives/1048 KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降 ...

  10. 2019年MTP管理技能提升培训笔记

    2019年MTP管理技能提升培训笔记 管理专题培训–MTP管理技能提升培训 高水准的问题分析解决 何为高水准 高 多层探寻,高度分析,即需要有深度 水 团队讨论,水平思考,即需要有广度 准 预防应变, ...