HDU 1055 - Color a Tree
一棵树,结点树为n,根结点为r。每个结点都有一个权值ci,开始时间为0,每染色一个结点需要耗时1,
每个结点的染色代价为ci*ti(ti为当前的时间),
每个结点只有在父结点已经被染色的条件下才能被染色。
求染完整棵树需要花费的最小代价。
找出当前最大子节点和其父节点合并成新的节点
直到点集中只剩一个节点
因为合并时将子节点的权值加在父节点上
则 每次更新 答案加上当前子节点的权值乘上父节点的花费时间,这个很神奇
因为合并后,当对其父节点操作时也会重复加上子节点权值,
即累加起来等同于每一个节点的最初权值乘上对应时间
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct node{
int f,v,t;
double w;//权值
}p[];
int n,r,a,b;
int main()
{
while(~scanf("%d%d",&n,&r),n+r)
{
int ans=;
for(int i=;i<=n;i++)
{
scanf("%d",&p[i].v);
p[i].w=p[i].v;
p[i].t=;
ans+=p[i].v;
}
for(int i=;i<n;i++)
{
scanf("%d%d",&a,&b);
p[b].f=a;
}
double wmax;
int pos,fa;
for(int i=;i<n;i++)
{
wmax=-;
for(int j=;j<=n;j++)//找当前大子节点
{
if(j==r) continue;//子节点!
if(wmax<p[j].w)//点权值比较时对比算数平均值
{
wmax=p[j].w;
pos=j;
}
}
p[pos].w=-;//去掉子节点
fa=p[pos].f;
ans+=p[pos].v*p[fa].t;//更新答案
for(int j=;j<=n;j++)//将子节点的子节点全部接在新建节点上
if(p[j].f==pos) p[j].f=fa;
p[fa].v+=p[pos].v;//新节点在父节点位置,节点的总权值等同于父子权值和
p[fa].t+=p[pos].t;//个数
p[fa].w=1.0*p[fa].v/p[fa].t;//比较时权值等于算术平均值
}
printf("%d\n",ans);
}
}
HDU 1055 - Color a Tree的更多相关文章
- hdu 6241 Color a Tree 2017 CCPC 哈理工站 L
Bob intends to color the nodes of a tree with a pen. The tree consists of NN nodes. These nodes are ...
- hdu 4603 Color the Tree
这道题细节真的非常多 首先能够想到a和b的最优策略一定是沿着a和b在树上的链走,走到某个点停止,然后再依次占据和这个点邻接的边 所以,解决这道题的过程例如以下: 预处理阶段: step 1:取随意一个 ...
- Color a Tree HDU - 6241
/* 十分巧妙的二分 题意选最少的点涂色 使得满足输入信息: 1 x的子树涂色数不少于y 2 x的子树外面涂色数不少于y 我们若是把2转化到子树内最多涂色多少 就可以维护这个最小和最大 如果我们二分出 ...
- HDU.1556 Color the ball (线段树 区间更新 单点查询)
HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...
- POJ 2054 Color a Tree
贪心.... Color a Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: ...
- hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Color a Tree[HDU1055]
Color a Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- hdu 5274 Dylans loves tree(LCA + 线段树)
Dylans loves tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
随机推荐
- PHP学习笔记三十五【Try】
<?php function AddUser($name) { if($name=="张三") { echo "add success"; return ...
- Entity Framework Code First主外键关系映射约定
本篇随笔目录: 1.外键列名默认约定 2.一对多关系 3.一对一关系 4.多对多关系 5.一对多自反关系 6.多对多自反关系 在关系数据库中,不同表之间往往不是全部都单独存在,而是相互存在关联的.两个 ...
- 导入android项目在eclipse中会报@Override错误
很多时候导入android项目在eclipse中会报@Override错误,这是由于java编译器的版本不正确,Java 1.5的编译器默认对父类的方法进行覆盖,采用@Override进行说明:但1. ...
- 配置Tomcat中的Context元素中的中文问题
发布一个名叫helloapp的web应用,helloapp位于D:\我\helloapp.发布的方式是通过配置<CATALINA_HOME>/conf/Catalina/localhost ...
- web.xml中配置Spring中applicationContext.xml的方式
2011-11-08 16:29 web.xml中配置Spring中applicationContext.xml的方式 使用web.xml方式加载Spring时,获取Spring applicatio ...
- js 对日期加减
function getDate(days) { var now = new Date(), newDate = new Date(now.getTime() - 86400000 * days), ...
- Python之路第十二天,高级(4)-Python操作rabbitMQ
rabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(M ...
- Ancient Printer(tire树)
Ancient Printer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) ...
- VS2005快捷键
VS2005快捷键 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + SHIFT + C显 ...
- instancetype和id的区别
一.什么是instancetype instancetype是clang 3.5开始,clang提供的一个关键字,表示某个方法返回的未知类型的Objective-C对象.我们都知道未知类型的的对象可以 ...