设根到每个叶子节点的距离为dis,比较容易的看出来,我们需要把这颗树的所有叶子节点的值都变成其中最大的内个,我们设为max,那么对于一颗子树来说,设其中dis值最大的为x,我们需要将这个子树根节点和子树根节点的父亲节点的边的值增加max-x,这时从贪心的角度来考虑,因为不论如何,对于当前最大的这个点来说,我们都需要将他的值增加max-x,那么我们只需要让这增加的更有价值,也就是使更多需要增加的点都被增加些,那么因为不能加多,所以取得是最大的点的dis值。那么dfs一遍就行了。

  反思:过程中申请变量没有赋初值。

  ps:这道题的数据有问题,生成输出数据的标程没有开longlong,开的是int,会自然溢出,所以pascal如果不手动模拟c++溢出是过不了的。

/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Wrong_Answer
****************************************************************/ //By BLADEVIL
var
n :longint;
pre, other, len :array[..] of longint;
root :longint;
last :array[..] of longint;
l :longint;
ans :int64;
max1, dis :array[..] of longint; procedure connect(x,y,z:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
len[l]:=z;
end; procedure dfs(x,fa:longint);
var
q, p :longint;
begin
q:=last[x];
max1[x]:=x;
while q<> do
begin
p:=other[q];
if p=fa then
begin
q:=pre[q];
continue;
end;
dis[p]:=dis[x]+len[q];
dfs(p,x);
if dis[max1[p]]>dis[max1[x]] then max1[x]:=max1[p];
q:=pre[q];
end;
end; procedure make(x,fa,tmp:longint);
var
q, p :longint;
up, use :longint;
begin
up:=dis[max1[root]];
use:=;
if fa<> then
begin
use:=up-tmp-dis[max1[x]];
ans:=ans+use;
end;
q:=last[x];
while q<> do
begin
p:=other[q];
if p=fa then
begin
q:=pre[q];
continue;
end;
make(p,x,tmp+use);
q:=pre[q];
end;
end; procedure init;
var
i :longint;
x, y, z :longint;
begin
read(n,root);
for i:= to n- do
begin
read(x,y,z);
connect(x,y,z);
connect(y,x,z);
end;
dfs(root,);
end; procedure main;
begin
make(root,,);
writeln(ans);
end; begin
init;
main;
end.

bzoj 1060 贪心的更多相关文章

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

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

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

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

  3. bzoj 1193 贪心

    如果两点的曼哈顿距离在一定范围内时我们直接暴力搜索就可以得到答案,那么开始贪心的跳,判断两点横纵坐标的差值,差值大的方向条2,小的条1,不断做,直到曼哈顿距离较小时可以暴力求解. 备注:开始想的是确定 ...

  4. BZOJ 1060 时态同步

    贪心. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  5. bzoj 2697 贪心

    就贪心就行了,首先可以看成n个格子,放物品,那么 一个物品假设放3个,放在1,k,n处,那么价值和放在1,n 是一样的,所以一个物品只放两个就行了,价值大的应该尽量放 在两边,那么排序之后模拟就行了 ...

  6. bzoj 3037 贪心

    我们可以贪心的分析,每个点的入度如果是0,那么这个点不可能 被用来更新答案,那么我们每次找入度为0的点,将他去掉,如果他连的 点没有被更新过答案,那么更新答案,去掉该点,环的时候最后处理就行了 /** ...

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

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

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

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

  9. bzoj 1193 贪心+bfs

    1193: [HNOI2006]马步距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2015  Solved: 914[Submit][Statu ...

随机推荐

  1. nodejs的交叉(跨平台)编译(to android)

    nodejs的二进制包有两种安装方式node-gyp以及node-pre-gyp 这两条命令会写入该包的安装脚本. node-gyp是使用gyp工具编译源码,因此必须指定交叉编译器(参见http:// ...

  2. Python 3基础教程31-urllib模块

    本文介绍Python里的urllib模块,这个urllib主要处理web服务的,如果需要做接口测试,或者写Python的网络爬虫,这个urllib就是最底层的库.需要用到里面的请求方法等. 1. 先看 ...

  3. Python 中的容器 collections

    写在之前 我们都知道 Python 中内置了许多标准的数据结构,比如列表,元组,字典等.与此同时标准库还提供了一些额外的数据结构,我们可以基于它们创建所需的新数据结构. Python 附带了一个「容器 ...

  4. django中判断当前user具有是否有对模块的增删改查权限

    首先简单了解一下user的一些属性 User对象 User对象是认证系统的核心.用户对象通常用来代表网站的用户,并支持例如访问控制.注册用户.关联创建者和内容等.在Django认证框架中只有一个用户类 ...

  5. Visual Studio 2014安装包

    点击下载

  6. 从微软msdn阅读事件的使用

    微软文章:如何:在 Windows 窗体应用程序中使用事件 地址:https://msdn.microsoft.com/zh-cn/library/0y0987sc.aspx 文章:C#事件的订阅与触 ...

  7. Linux 监测系统资源

    Top;1; Linux监控磁盘性能 yum install sysstat iostat -x 1 %util:磁盘使用io所占百分比

  8. idea tomcat 启动报错 org.apache.catalina.core.StandardService.initInternal Failed to initialize connector

    org.apache.catalina.core.StandardService.initInternal Failed to initialize connector org.apache.cata ...

  9. Intellij IDEA 系统路径配置

    在使用IDEA启动Tomcat的时候,会读取系统路径,默认路径可能不是我们想要的,可以修改 C:\MyPrograms\IntelliJ IDEA 14.0.1\bin\idea.properties ...

  10. sql 先查出已知的数据或者需要的数据再筛选

    sql 先查出已知的数据或者需要的数据再筛选