题目描述

小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%的数据,N ≤ 1000

对于100%的数据,N ≤ 500000

对于所有的数据,te ≤ 1000000

题解:

贪心地选择尽量在靠近根的地方使用道具。最后得到的同一时间就是操作前最大的时间t,深搜的时候,如果发现子树i里时间最大的小于t,就在i到根的路径上使用道具,使子树i里所有节点的时间都变大。

记得开long long

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#define nn 500005
#define mm 1000005
using namespace std;
int e=0,d=-1,t[mm],fir[nn],nxt[mm],to[mm];
long long md[nn],dis[nn];
int get()
{
int ans=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) {ans=ans*10+ch-'0';ch=getchar();}
return ans*f;
}
void add(int a,int b,int c)
{
nxt[++e]=fir[a];fir[a]=e;to[e]=b;t[e]=c;
nxt[++e]=fir[b];fir[b]=e;to[e]=a;t[e]=c;
}
void dfs(int q)
{
for(int i=fir[q];i;i=nxt[i])
if(!dis[to[i]])
{
dis[to[i]]=dis[q]+t[i];
md[to[i]]=dis[to[i]];
dfs(to[i]);
if(md[to[i]]>md[q])
md[q]=md[to[i]];
}
if(md[q]>d) d=md[q];
}
long long dp(int q,long long mo)
{
long long an=0,ad=0;
md[q]+=mo;
if(md[q]<d)
{
ad=d-md[q];
an+=ad;
}
for(int i=fir[q];i;i=nxt[i])
if(dis[to[i]]>dis[q])
an+=dp(to[i],ad+mo);
return an;
}
int main()
{
int n=get(),s=get(),a,b,c;
for(int i=1;i<n;i++)
{
a=get();b=get();c=get();
add(a,b,c);
}
dis[s]=1;
dfs(s);
printf("%lld",dp(s,0));
return 0;
}

  

最新文章

  1. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
  2. Go语言配置与开发环境配置
  3. Object.create
  4. 直接用Qt写soap
  5. Jmeter组件4. Regular Expression Extractor
  6. Docker Hub仓库注册,使用
  7. 使用sp_addextendedproperty添加描述信息
  8. 【转】【C#】【Thread】【Parallel】并行计算
  9. 禁随意改root密码
  10. Spring Web Flow使用
  11. Object.defineProperty vs __defineGetter__ vs normal
  12. realvnc的卸载
  13. django drf json格式化日期时间带T的问题 基于python的解决方法
  14. .net core2.x - Identity - 简介
  15. bzoj-1191(二分图最大匹配)
  16. js中的object
  17. Java 学习 UUID 与 时间格式化、时间操作
  18. :hover在ios无效问题
  19. [Windows Hook] 屏蔽键盘按键
  20. echarts饼图配置

热门文章

  1. Leetcode59. Spiral Matrix II螺旋矩阵2
  2. Leetcode48. Rotate Image旋转图像
  3. 在MaxCompute中利用bitmap进行数据处理
  4. deque简单解析
  5. arcgis增大缩放级别
  6. git pull 提示错误,Your local changes to the following files would be overwritten by merge
  7. NFS实现(双httpd + php-fpm + nfs + mysql 搭建discuz论坛)的方法
  8. 国内首个全域边缘节点服务发布,阿里云助力企业把握5G机遇
  9. windows下 python中报错ImportError: No module named &#39;requests&#39;
  10. MSSQL → 01:SQLServer 2008概述及安装