题目描述

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

在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后,产生一个激励电流,通过导线传向每一个它所连接的节点。而中间节点接收到激励电流后,得到信息,并将该激励电流传向与它连接并且尚未接收到激励电流的节点。最终,激烈电流将到达一些“终止节点”――接收激励电流之后不再转发的节点。

激励电流在导线上的传播是需要花费时间的,对于每条边 e,激励电流通过它需要的时间为 te​ ,而节点接收到激励电流后的转发可以认为是在瞬间完成的。现在这块电路板要求每一个“终止节点”同时得到激励电路――即保持时态同步。由于当前的构造并不符合时态同步的要求,故需要通过改变连接线的构造。目前小 Q有一个道具,使用一次该道具,可以使得激励电流通过某条连接导线的时间增加一个单位。请问小Q最少使用多少次道具才可使得所有的“终止节点”时态同步?

输入输出格式

输入格式:

第一行包含一个正整数 N ,表示电路板中节点的个数。

第二行包含一个整数 S ,为该电路板的激发器的编号。

接下来 N−1行,每行三个整数 a,b,t。表示该条导线连接节点 a 与节点 b,且激励电流通过这条导线需要 t个单位时间。

输出格式:

仅包含一个整数 V ,为小 Q 最少使用的道具次数。

输入输出样例

输入样例#1:

3

1

1 2 1

1 3 3

输出样例#1:

2

说明

对于 40%40%40% 的数据, N≤1000

对于 100%100%100% 的数据, N≤500000

对于所有的数据, te≤1000000




Solution

这道题,一开始想了一个很简单的贪心思路.

即先做一遍 遍历 ,找出当前到根节点距离最大的点的距离.

然后,再用 遍历一遍,将每个点都改成这个点的距离.再加到答案.结果发现全 WA ...




然后想了想,发现这样子会把我刚才统计到的最大的那个点也修改掉.然后就会导致不符合...

所以,再想了下优化,那么我们每次都统计一遍当前这个节点的子节点中到根节点距离最大的那个点.

那么我们每一需要修改的就是当前这个点的子树的最大距离减去其去往的点的子树的最大距离.

然后再搜一遍即可.


代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=500008;
struct sj{
ll to;
ll next;
ll w;
}a[maxn*2];
ll size,head[maxn];
ll n,s,v[maxn],tag;
ll now,f[maxn],ans; void add(ll x,ll y,ll z)
{
a[++size].to=y;
a[size].next=head[x];
head[x]=size;
a[size].w=z;
} void pre(ll x)
{
v[x]=1;
for(ll i=head[x];i;i=a[i].next)
{
ll tt=a[i].to;
if(!v[tt])
{
pre(tt);
f[x]=max(f[x],f[tt]+a[i].w);
}
}
} void dfs(ll x)
{
v[x]=1;
for(ll i=head[x];i;i=a[i].next)
{
ll tt=a[i].to;
if(!v[tt])
{
dfs(tt);
ans+=f[x]-f[tt]-a[i].w;
}
}
} int main()
{
ios::sync_with_stdio(false);
cin>>n>>s;
for(ll i=1;i<n;i++)
{
ll x,y,s;
cin>>x>>y>>s;
add(x,y,s);
add(y,x,s);
}
pre(s);
memset(v,0,sizeof(v));
dfs(s);
cout<<ans<<endl;
}

[ZJOI2007]时态同步 (树形DP)的更多相关文章

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

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

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

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

  3. [BZOJ1060][ZJOI2007]时态同步 树形dp

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

  4. BZOJ1060: [ZJOI2007]时态同步(树形dp 贪心)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3285  Solved: 1286[Submit][Status][Discuss] Descript ...

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

    要自下向上调整,尽可能用一个道具修改多个: 搜的时候记录叶节点的最大深度,减一下就好了. #include<cstdio> #include<iostream> #includ ...

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

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

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

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

  8. 【BZOJ-1060】时态同步 树形DP (DFS爆搜)

    1060: [ZJOI2007]时态同步 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2101  Solved: 595[Submit][Statu ...

  9. LG1131 「ZJOI2007」时态同步 树形DP

    问题描述 LG1131 题解 正难则反,把从一个点出发到叶子结点看做从叶子结点走到那个点. DP方程很显然. \(\mathrm{Code}\) #include<bits/stdc++.h&g ...

随机推荐

  1. phantomas参数选项

    PhantomJS-based web performance metrics collector phantomas <url> [options] General options: - ...

  2. SnowKiting 2017/1/24

    原文 Let's go fly a kite...in the snow Your snowkiting checklist To snowkite safely,you'll need a litt ...

  3. hihoCoder #1080 : 更为复杂的买卖房屋姿势 (线段树,多tag)

    题意: 有编号为0~n的n+1个房屋,给出每个房屋的起始价格,随后给出m种修改,每次修改都要进行输出所有房屋的价格总和.修改有两种方式:(1)政府调控,编号L~R全置为同一价格(0)房屋自行涨跌,编号 ...

  4. 新建maven的pom.xml第一行出错的解决思路

    前言:博主在想要用maven创建项目的时候,忘记之前已经安装过maven了,所以再安装了另一个版本的maven,导致在pom.xml的第一行总是显示某一个jar的zip文件读取不出来. 在网上找了很多 ...

  5. Vue 前端面试题[转]

    https://mp.weixin.qq.com/s/Uxhx2dJ1Xbm6N3Gl7wNZNw Vue 前端面试题 游荡de蝌蚪 前端开发 1周前 作者:游荡de蝌蚪 https://segmen ...

  6. ucosii(2.89)mbox 应用要点

    OSMboxCreate(void *msg)     当创建一个mbox时候,消息邮箱允许(任务或者中断)向其他一个或者几个任务发送消息.初始化msg指向消息邮箱中的消息. void*OSMboxP ...

  7. 如何 Scale Up/Down Deployment?【转】

    伸缩(Scale Up/Down)是指在线增加或减少 Pod 的副本数.Deployment nginx-deployment 初始是两个副本. k8s-node1 和 k8s-node2 上各跑了一 ...

  8. 设置与使用SQL Server的字符集(Collation,即排序规则)

    目录 目录 正确认识SQL Server的字符集 选择合适的SQL Server字符集 错误使用SQL Server的字符集 参考资料 正确认识SQL Server的字符集 SQL Server作为一 ...

  9. QT +样式表

    学习样式表的目的:可以设计出好看的控件.(比如可以给一些按钮设计成好看的图片) QT 样式表的思想很大程度上是来自于HTML的层叠式样式表(CSS),通过调用QWidget->setStyleS ...

  10. Java8新特性Lambda表达式

    List<RoleDO> allRoles = roleService.list(); //获取角色中备注不是app的集合List<RoleDO> webRoles = all ...