Description
小Q在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号。电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都存在且仅存在一条通路(通路指连接两个元件的导线序列)。在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后,产生一个激励电流,通过导线传向每一个它所连接的节点。而中间节点接收到激励电流后,得到信息,并将该激励电流传向与它连接并且尚未接收到激励电流的节点。最终,激烈电流将到达一些“终止节点”——接收激励电流之后不再转发的节点。激励电流在导线上的传播是需要花费时间的,对于每条边e,激励电流通过它需要的时间为te,而节点接收到激励电流后的转发可以认为是在瞬间完成的。现在这块电路板要求每一个“终止节点”同时得到激励电路——即保持时态同步。由于当前的构造并不符合时态同步的要求,故需要通过改变连接线的构造。目前小Q有一个道具,使用一次该道具,可以使得激励电流通过某条连接导线的时间增加一个单位。请问小Q最少使用多少次道具才可使得所有的“终止节点”时态同步?
Input
第一行包含一个正整数N,表示电路板中节点的个数。 第二行包含一个整数S,为该电路板的激发器的编号。 接下来N-1行,每行三个整数a , b , t。表示该条导线连接节点a与节点b,且激励电流通过这条导线需要t个单位时间。
Output
仅包含一个整数V,为小Q最少使用的道具次数。
Sample Input
3
1
1 2 1
1 3 3
Sample Output
2
【数据规模】
对于40%的数据,N ≤ 1000
对于100%的数据,N ≤ 500000
对于所有的数据,te ≤ 1000000

其实题目是比较简单的,但是由于出题人标程打错了,爆了int,出题人除了ans开了long long,其他都是int,p党不好过呀,要么cheat,要么模拟C++爆int

把激发器做根,树dp

先算出每个节点往下延伸的最大深度,再把其他儿子调整成这个深度,这个可以证明是最优策略

要写BFS不然会爆栈的

原题本来是可以用这个过的

 {$M 5000000}
const
maxn=;
var
f:array[..maxn]of int64;
t:array[..maxn*]of int64;
first:array[..maxn]of longint;
next,last:array[..maxn*]of longint;
flag:array[..maxn]of boolean;
n,s,tot:longint;
ans:int64; procedure insert(x,y,z:longint);
begin
inc(tot);
last[tot]:=y;
next[tot]:=first[x];
first[x]:=tot;
t[tot]:=z;
end; procedure init;
var
i,x,y,z:longint;
begin
read(n,s);
for i:= to n- do
begin
read(x,y,z);
insert(x,y,z);
insert(y,x,z);
end;
end; procedure dfs(x:longint);
var
i:longint;
begin
i:=first[x];
flag[x]:=true;
while i<> do
begin
if flag[last[i]]=false then
begin
dfs(last[i]);
if f[x]<f[last[i]]+t[i] then f[x]:=f[last[i]]+t[i];
end;
i:=next[i];
end;
i:=first[x];
while i<> do
begin
if flag[last[i]]=false then inc(ans,f[x]-f[last[i]]-t[i]);
i:=next[i];
end;
flag[x]:=false;
end; begin
init;
dfs(s);
write(ans);
end.

但是没办法,用c++写了一个(爆int)

 #include<cstdio>
using namespace std; const int maxn=; int f[maxn],first[maxn],t[maxn*],next[maxn*],last[maxn*],fa[maxn];
bool flag[maxn];
int n,s,tot;
long long ans; void insert(int x,int y,int z)
{
++tot;
last[tot]=y;
next[tot]=first[x];
first[x]=tot;
t[tot]=z;
} void init()
{
int i,x,y,z;
scanf("%d%d",&n,&s);
for(i=;i<n;++i)
{
scanf("%d%d%d",&x,&y,&z);
insert(x,y,z);
insert(y,x,z);
}
} int q[maxn];
int head,tail; void bfs()
{
int i,j;
head=,tail=;
q[]=s;
for(i=;i<=n;++i)flag[i]=true;
while(head<=tail)
{
flag[q[head]]=false;
i=first[q[head]];
while(i!=)
{
if(flag[last[i]])q[++tail]=last[i];
else fa[q[head]]=last[i];
i=next[i];
}
++head;
}
for(i=tail;i>;i--)
{
j=first[q[i]];
while(j!=)
{
if(last[j]!=fa[q[i]] & f[q[i]]<f[last[j]]+t[j])f[q[i]]=f[last[j]]+t[j];
j=next[j];
}
j=first[q[i]];
while(j!=)
{
if(last[j]!=fa[q[i]])ans+=f[q[i]]-f[last[j]]-t[j];
j=next[j];
}
}
} int main()
{
init();
bfs();
printf("%lld",ans);
return ;
}

1060: [ZJOI2007]时态同步 - BZOJ的更多相关文章

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

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

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

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

  3. BZOJ 1060: [ZJOI2007]时态同步 树上问题 + 贪心

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

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

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

  5. 1060: [ZJOI2007]时态同步

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

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

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

  7. BZOJ 1060: [ZJOI2007]时态同步

    Description 一个有根树,你只能进行增加操作,问你将所有叶节点到根的路径权值相同至少需要增加几次. Sol 我也不知道该叫什么算法... 反正就是记录一下到子节点到当前节点的最大距离统计答案 ...

  8. bzoj 1060 [ZJOI2007]时态同步(树形DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1060 [题意] 求最少的增加量,使得以rt为根的树中由一个结点出发的所有到叶子结点的路 ...

  9. bzoj 1060: [ZJOI2007]时态同步【树形dp】

    可能算不上dp,大概是个树形模拟 先一遍dfs算出f[u]为每个点最深的叶子到u的距离,然后再dfs一下,ans加上f[u]-f[e[i].to]-e[i].va,f[u]-f[e[i].to]是这条 ...

随机推荐

  1. LoadRunner 如何进行接口的压力测试

    主要压测的时候需要开发提供相关接口文档,或者自己录制.左侧的Name都是开发提供的接口参数名称,Value是相应的参数值.Action为开发给的测试地址.PS:注意在测试的时候设置Controller ...

  2. JavaScript常用的经典小技巧

    1.屏蔽鼠标右键 <--body 方式--> <body oncontextmenu="window.event.returnValue=false"> & ...

  3. 织梦dedecms源码安装方法

    织梦dedecms源码安装方法 第一步: 上传所有文件到空间 注意:(由于有很多人反应安装后首页样式都乱的,所以强烈要求安装到根目录,如:127.0.0.1 / www.xxx.com,或者二级域名也 ...

  4. 如何通过PhpMyAdmin批量删除MYSQL数据库数据表

    使用这个方法前,强烈建议先备份整个数据库.至于怎么备份?你不会么?在本文下方留言吧. 具体方法:复制下面的php执行语句,保存为sql.php文件(注意配置数据库名称.密码.数据表头),通过ftp上传 ...

  5. Java Concurrency - invokeAny & invokeAll

    Running multiple tasks and processing the first result A common problem in concurrent programming is ...

  6. Error This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. T

    错误提示: Severity Code Description Project File Line Suppression StateError This project references NuG ...

  7. Windows7 下配置添加ASP功能

    按照如下顺序添加 1.控制面板-程序-打开或关闭Windows功能 2.Internet信息服务-万维网服务-应用程序开发功能 3.勾选ASP 和ASP.net选项 确定后安装完毕即可支持.

  8. SharpZipLib 压缩后传输给第三方平台无法识别问题

    问题描述:在项目中需要将文件压缩然后传输给三方进行彩信发送,使用SharpZipLib 进行压缩,原先使用J#进行压缩处理,但是用SharpZipLib压缩后的zip文件传输过去之后,总会报发送失败. ...

  9. JAVA 实现通过URL下载文件到本地库

    /** * TODO 下载文件到本地 * @author nadim * @date Sep 11, 2015 11:45:31 AM * @param fileUrl 远程地址 * @param f ...

  10. iOS动画——弹窗动画(pop动画)

    用pop动画简单实现弹窗的缩放和渐变,感觉这个动画常用,就写一下博客 pop动画是Facebook推出的动画引擎,请自行到GitHub上搜索下载拖拽导入xcode项目中. 更多pop动画使用和原理可网 ...