bzoj 1060 贪心
设根到每个叶子节点的距离为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 贪心的更多相关文章
- BZOJ 1060: [ZJOI2007]时态同步 树上问题 + 贪心
Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...
- BZOJ 1060: [ZJOI2007]时态同步
Description 一个有根树,你只能进行增加操作,问你将所有叶节点到根的路径权值相同至少需要增加几次. Sol 我也不知道该叫什么算法... 反正就是记录一下到子节点到当前节点的最大距离统计答案 ...
- bzoj 1193 贪心
如果两点的曼哈顿距离在一定范围内时我们直接暴力搜索就可以得到答案,那么开始贪心的跳,判断两点横纵坐标的差值,差值大的方向条2,小的条1,不断做,直到曼哈顿距离较小时可以暴力求解. 备注:开始想的是确定 ...
- BZOJ 1060 时态同步
贪心. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- bzoj 2697 贪心
就贪心就行了,首先可以看成n个格子,放物品,那么 一个物品假设放3个,放在1,k,n处,那么价值和放在1,n 是一样的,所以一个物品只放两个就行了,价值大的应该尽量放 在两边,那么排序之后模拟就行了 ...
- bzoj 3037 贪心
我们可以贪心的分析,每个点的入度如果是0,那么这个点不可能 被用来更新答案,那么我们每次找入度为0的点,将他去掉,如果他连的 点没有被更新过答案,那么更新答案,去掉该点,环的时候最后处理就行了 /** ...
- bzoj 1060 [ZJOI2007]时态同步(树形DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1060 [题意] 求最少的增加量,使得以rt为根的树中由一个结点出发的所有到叶子结点的路 ...
- BZOJ 1060: [ZJOI2007]时态同步( 树形dp )
坑爹...数据是错的..详见discuss http://www.lydsy.com/JudgeOnline/wttl/wttl.php?pid=1060 先求根到叶子的距离最大值x, 然后把所有叶 ...
- bzoj 1193 贪心+bfs
1193: [HNOI2006]马步距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2015 Solved: 914[Submit][Statu ...
随机推荐
- javac一次性编译多个包下的.java文件
如题是我想要知道的,然后在网上搜了一下 下面是在某些帖子里看到别人说的只言片语 =========================================================== ...
- 【Java】Map转换器
描述: 在控制层接收参数时候, 往往会出现Json格式需要转换为Bean. 通常一两个字段可以用new去save pojo, 但字段多的情况呢? 以下就是为了解决这个尴尬情况, 自己写一个转换工具类 ...
- 让PC版网站在移动端原样式显示
一般PC网站在移动端显示效果往往和PC版原样式不同,为了在移动端下还原原PC站样式,可以采用以下方式解决: 1) 去掉页头的: <meta name="viewport" c ...
- 【Linux运维】Centos7上借助ansible搭建LVS+Keepalived
安装ansible 安装ansible: [root@localhost ~]# /etc/hosts 192.168.19.129 web129.yanglt.com web129 192.168. ...
- 小旭讲解 LeetCode 53. Maximum Subarray 动态规划 分治策略
原题 Given an integer array nums, find the contiguous subarray (containing at least one number) which ...
- UZH slam 两种相机
1.event camera:http://rpg.ifi.uzh.ch/research_dvs.html 2.SCAMP Vision Sensor:https://personalpages.m ...
- Leetcode 684.冗余连接
冗余连接 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条 ...
- TensorFlow 同时调用多个预训练好的模型
在某些任务中,我们需要针对不同的情况训练多个不同的神经网络模型,这时候,在测试阶段,我们就需要调用多个预训练好的模型分别来进行预测. 调用单个预训练好的模型请点击此处 弄明白了如何调用单个模型,其实调 ...
- 一篇文章解决django中时区问题
首先要明确的是,当在Django项目的setting.py文件中设置了USE_TZ=True时,我们给定的时间存储到数据库的时候都会变成UTC时间(使用auto_now_add和auto_now为Tr ...
- 【转】cocos2dx 3.x 集成protobuf
http://www.cnblogs.com/chevin/p/6001872.html vs2013+cocos2dx 3.13.1 这篇博文是集成Lua版本的protobuf,集成C++版本的过程 ...