一棵树,结点树为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的更多相关文章

  1. 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 ...

  2. hdu 4603 Color the Tree

    这道题细节真的非常多 首先能够想到a和b的最优策略一定是沿着a和b在树上的链走,走到某个点停止,然后再依次占据和这个点邻接的边 所以,解决这道题的过程例如以下: 预处理阶段: step 1:取随意一个 ...

  3. Color a Tree HDU - 6241

    /* 十分巧妙的二分 题意选最少的点涂色 使得满足输入信息: 1 x的子树涂色数不少于y 2 x的子树外面涂色数不少于y 我们若是把2转化到子树内最多涂色多少 就可以维护这个最小和最大 如果我们二分出 ...

  4. HDU.1556 Color the ball (线段树 区间更新 单点查询)

    HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...

  5. POJ 2054 Color a Tree

    贪心....                    Color a Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions:  ...

  6. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. hdu 1556:Color the ball(线段树,区间更新,经典题)

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. Color a Tree[HDU1055]

    Color a Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  9. hdu 5274 Dylans loves tree(LCA + 线段树)

    Dylans loves tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

随机推荐

  1. 关于自定义UICollectionViewLayout的一点个人理解<一>

    自定义UICollectionView,主要会用到以下几个方法: - (void)prepareLayout; 第一次加载layout.刷新layout.以及- (BOOL)shouldInvalid ...

  2. SAR ADC : 逐次逼近寄存器型(SAR)模数转换器(ADC)

    1.为实现二进制搜索算法,N位寄存器首先设置在中间刻度(即:100... .00,MSB设置为1).这样,DAC输出(VDAC)被设为VREF/2,VREF是提供给ADC的基准电压.然后,比较判断VI ...

  3. 混合高斯模型和EM算法

    这篇讨论使用期望最大化算法(Expectation-Maximization)来进行密度估计(density estimation). 与k-means一样,给定的训练样本是,我们将隐含类别标签用表示 ...

  4. android 开发环境搭建 (转)

    最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是一直没有搭建开发环 境去学习,Android的更新速度比较快了,Android1 ...

  5. Java程序的成长之路

    转载链接:http://www.admin10000.com/document/2901.html 互联网发展日新月异,社会科技每天都在发生着翻天覆地的变化,而程序员已经成了这个时代的庞大群体,各种各 ...

  6. Cleaning Shifts(POJ 2376 贪心)

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15143   Accepted: 3875 ...

  7. linux vim 常用命令

    一. VIM高亮 进入vim后,在普通模式下输入如下命令,开启php代码高亮显示 :syntax enable :source $VIMRUNTIME/syntax/php.vim二. VI常用命令_ ...

  8. Effective Java2读书笔记-创建和销毁对象(四)

    第7条:避免使用终结方法 这一条讲的简直是不知所云.先简单记下来其中说出的几条: ①显式终止方法的典型例子有InputStream.OutputStream和java.sql.Connection上的 ...

  9. python模范发送邮件的时候,才smtp.connect的时候总是抛出错误

    python发送邮件的时候,总是出现:[Errno 10060] 错误码 根据debug得到在connect的时候出错. 认真检查了下host,没有错呀~应该就是服务器的host. 查看了下网上的一些 ...

  10. Extjs4 Grid内容已经拿到但是不显示数据

    原先照着Extjs4.0.7官方文档写了一个GridPanel的列子,没有什么问题,今天又自己写了一个,效果如下,内容肯定拿到就是不显示: 经过一段代码排查后,问题出在了自定义Model时将field ...