POJ 2054 Color a Tree 贪心

pku 2054 color a tree 解题报告 花了老长时间琢磨。。终于还是过了,长了很多经验,写的简单易懂。。 立即下载

时空隧道


题目大意:
给出一棵有根树(有向边),每个节点权值为val[i],要求把所有点组成一个序列并且父亲节点排在子节点前面,使得ans=val[1]*1+val[2]*2+……+val[n]*n最小…


分析:
看到此题第一想法就是val大的放前面…但是这是在没有限制的情况下…如果我们现在限制父节点一定比子节点靠前那么对于val大的子节点来说当然是紧挨着父节点最好…所以我们可以得到一些二元组(也就是把子节点和父节点绑定)…
现在我们有xy这个二元组和z这个单独节点,考虑怎样排列使得结果最优…
假设先选xy优于先选z,那么我们可以得到式子i*x+(i+1)*y+(i+2)*z < i*z+(i+1)*x+(i+2)*y…化简得到x+y>2*x,也就是(x+y)/2>x…这不就是说x+y的平均值大的优先选么…
现在我们把二元组和点扩展为两个序列…可以得到同样的结论…平均值大的优先选…所以我们只要每次选出val最大的点,然后把当前节点与其父节点合并(val变为平均值)就可以确定序列的顺序了…


代码如下:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
using namespace std;
const int maxn=1000+5;
int n,r,fa[maxn],sum[maxn],tim[maxn],cnt,ans;
double val[maxn];
signed main(void){
    while(scanf("%d%d",&n,&r)&&!(!n&&!r)){
        cnt=ans=0;
        for(int i=1;i<=n;i++)
            scanf("%lf",&val[i]),ans+=(int)val[i],sum[i]=val[i],tim[i]=1;
        for(int i=1,x,y;i<n;i++)
            scanf("%d%d",&x,&y),fa[y]=x;//有向图 
        while(cnt<n-1){
            cnt++;int v;double MAX=0;//每次找序列中最大的进行合并 
            for(int i=1;i<=n;i++)
                if(val[i]>MAX&&i!=r)
                    MAX=val[i],v=i;
            for(int i=1;i<=n;i++)
                if(fa[i]==v)
                    fa[i]=fa[v];//合并之后要更新当前点的子节点的fa 
            ans+=sum[v]*tim[fa[v]];val[v]=0;//tim[fa[v]]就是当前子序列中当前点前面有多少个点 
            tim[fa[v]]+=tim[v];sum[fa[v]]+=sum[v],val[fa[v]]=(double)sum[fa[v]]/(double)tim[fa[v]];
        }
        cout<<ans<<endl;
    }
    return 0;
}

by >_< NeighThorn

MacX DVD Ripper Pro for Mac(DVD解码器) 6.2.120190416免激活版 只需要5分钟即可转档一张DVD光碟!并允许我们在编码之前预览、编辑、裁剪、修剪或扩展视频。第一款也是唯一一款能够支持DVD到MP4,H.264,MOV,FLV,MPEG4等所有格式DVD(新DVD,99-标题DVD,损坏和无法播放的DVD)和翻录DVD / ISO映像的工具,AVI,QT,MP3等。借助350多种预设配置文件MacX DVD Ripper Pro for Mac(DVD解码器) 6... 阅读详情

相关推荐

简单说说Python中的pip如何换源

【安装包】:pip install 【升级包】:pip install --upgrade 【卸载包】:pip uninstall 【查看已安装的包】:pip list【搜索包】:pip search (注意:pip search功能在pip 10.0.0之后被弃用,建议使用其他方式搜索包,如访问PyPI官网或使用其他搜索引擎)

一捌柒的博客 2666

poj解题报告——2054

处理思路:利用贪心思想,每次取权值最大的节点,不断的将权值最大节点与它的父节点合并。         过程:        1、初始时将序列中的time[i]都置为1,w[i]置为c[i];        2、查找最大的w[i], 返回其位置;        3、将该位置的c[ ]与它的父节点c[ ]合并(合并过程就是C_i / T_i,C_i = c[该节点] + c[父节点],T_i

Lingfu74的专栏 700

Java黑皮书课后题第5章:*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生

*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生名字、次高分的学生名字题目题目概述next()读取一个字符与nextLine()读取一行破题代码 题目 题目概述 *5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生名字、次高分的学生名字 使用Scanner类的next()方法而不是nextLine()方法来读取名字 next()读取一个字符与nextLine()读取一行 举个例子理

weixin_46356698的博客 2154

POJ 2054 谜一样的贪心 TAT

题意:给一个树形图(边为有向边的树),每个节点有一个权值Ci,要求给每个节点染色,要求是如果想对一个节点染色,那么必须保证它的父节点已经被染过色。求一个最小的染色代价,每个节点的代价是ki*Ci,ki代表在整个图中,节点i是第ki个被染色的。 // 如果想直接看AC思路,请跳过接下来这几段,并忽略第一份代码  T^T~ -----------------------------

Sky 1269

第四章 自定义组件、动画

第三章 自定义组件、动画 (一)自定义View 1.1) onMeasure:对当前View的尺寸进行测量 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) widthMeasureSpec和heightMeasureSpec包含测量模式和尺寸大小 int widthMode = MeasureSpec....

Stay Hungry Stay Foolish 求知若饥 虚心若愚 8130

如何获取SAP BTP账户及BAS启用

返回到 Service Marketplace 点击SAP Business Application Studio 然后go to Application。进入子用户的OverView里面找到Entitlements添加SAP Business Application Studio。注意:在选购BTP免费环境的时候,使用人要选公司才可以成功。在完成上述操作后,就可以登陆Cockpit。这里有SAP官方的BTP试用的手顺链接。配置权限※我绑定的是登录时的邮箱。※过程中有问题可以在评论区讨论。

wangshulong2013的博客 721

POJ-2054 Color a Tree

Bob对树十分感兴趣。树是一种有向图,其中有一个特殊的节点被称为树的“根”。并且“根”与任意节点之间的可达路径是唯一的。Bob想要给树的所有节点进行上色。一颗树拥有N个节点,这些节点编号为1,2,....,N。假设Bob为一个节点上色需要1个单元时间,并且Bob上色的操作是逐个进行的,完成一个节点的上色后,可以为另一个节点上色。,每一个节点被上色之前,其父节点已被上色。显而易见的,Bob的一次尝试有且只能对“根”节点进行操作。每一个节点拥。“上色成本”依赖于编号i个节点的权值和其完成的时间。

qq_73643549的博客 385

通过miniconda conda安装jupyer的时候报错: InvalidArchiveError(“Error with archive

摘要:本文针对Windows系统使用Conda时出现的InvalidArchiveError错误(文件路径过长或压缩包损坏),提供了解决方案。建议以管理员身份运行PowerShell并执行命令启用长路径支持(LongPathsEnabled),然后重启电脑或终端。作者通过该方法成功解决了jupyter安装问题。附有错误截图和解决后的成功截图。

猿小白的博客 782

[POJ2054]Color a Tree (并查集+贪心)

POJ终于修好啦 题意 和UVA1205是同一题,在洛谷上是紫题 有一棵树,需要给其所有节点染色,每个点染色所需的时间是一样的都是11.给每个点染色,还有一个开销“当前时间×ci×ci”,cici是每个节点的一个权值。(当前时间是染完这个节点的时间) 染色还有另一个约束条件,要染一个点必须要先染好其父节点,所以第一个染的点是根节点. 求最小开销。 思路 这道题显然对于 ...

diejia6473的博客 505

【图像拼接】论文精读:As-Rigid-As-Possible Shape Manipulation(ARAP)

文章目录前言1.摘要2.算法的总体流程总结 前言 图像变形算法 1.摘要 论文提出了一个二维图形互动系统。图形是建立在三角形网格上的,用户只需移动几个网格顶点(限制顶点),系统通过最小化每个三角形的误差计算网格剩余顶点(自由顶点)的位置。 算法分两步: 适当旋转每个三角形。 调整大小。 关键是使用二次度量误差将最小化问题转换成线性方程组,然后再解这个方程组。 刚性形状变形是很难的,论文的研究使其变得简单。 2.算法的总体流程 总的流程分三步: 将图形用三角形网格覆盖 选择三个点(限制顶点) 操纵限

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 15万+

PHP 网页游戏开发入门教程

我们还链接了一个名为 “game.js” 的 JavaScript 文件,稍后将在其中编写游戏逻辑。这只是一个简单的示例,但它演示了如何使用 PHP 和 JavaScript 开发一个基本的网页游戏。以下是一个示例游戏的源代码和解释。现在,您可以在浏览器中打开 “game.php” 文件,即可看到一个带有红色游戏角色的游戏板。在上述代码中,我们使用 JavaScript 创建了一个游戏角色元素,并将其添加到游戏板容器中。最后,我们需要将游戏元素的样式设置为绝对定位,以便能够正确地控制它们的位置。

KkowServer的博客 678

POJ 2054---Color a Tree

题目链接:poj2054 很好的一道贪心题,是边计算边贪心,此外,理解思路是难点一,实现是难点二,可以说思路和实现都很需清晰的头脑。 #include using namespace std; /*** 好题!discuz上有N=1000的数据, 思路是一下两点: 1.在未访问的node中,权重最大的点应该在访问它的父亲后马上访问,依此进行点的合并; 2.合并后点的权重相当于其所包含原

mandycool的专栏 732

【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面

平台:基本常用平台包括安卓,苹果(max和IOS),Windows64,Linux都行。10. 注意,如果从移动设备浏览器连接服务,信令服务器的SSL证书一定要先设好。想要在Unity中实现实时远程桌面,找到了Render Streaming这个手段,本篇介绍相应的使用方法和实例。8. 打开电脑浏览器,地址栏输入http://127.0.0.1,点击Receiver Sample。新建Unity项目,模板选Third Person,Project Name随意。启动App,控制台出现如下信息表示成功。

每日出拳老爷子的博客 2518

POJ 2054 Color a Tree (贪心)

$ POJ~2054~Color~a~Tree $ $ solution: $ 我们先从题中抽取信息,因为每个点的费用和染色的次数有关,所以我们可以很自然的想到先给权值大的节点染色。但是题目还说每个节点染色前它的父亲节点也必须被染色,这就有了很多的后效性。 暂时没有办法贪心,我们就只能再找找性质。博主首先想到的是从叶子节点考虑,叶子节点里权值最小的一定最后染色。但是经过自我hack...

weixin_30563319的博客 111

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

POJ2054 Color a Tree 贪心

题目链接 http://poj.org/problem?id=2054 分析 树中权值最大的点会在其父亲被染色后立即被染,因此可以合并点。 设 xxx 是 yyy 的父亲,zzz 是另外一点,当前时间为 aaa,则不同方案代价分别为 a×x+(a+1)×y+(a+2)×za \times x + (a + 1) \times y + (a + 2) \times za×x+(a+1)×y+(a+2...

Kevin的博客 258

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

POJ2054 Color a Tree(贪心)

POJ传送门 【题目分析】 这是什么神仙贪心。。。。。。 首先可以得到一个比较明显的性质,对于当前树中的最大点,在它的父亲被染色后一定会染它。 那么对于染色序列中的三个点x,y,z,如果已知x,y是连续染色,那么就有两种情况: 1)染色序列为x,y,z,代价为x+2y+3z 2)染色序列为z,x,y,代价为z+2x+3y 然后就是一个神仙操作,两边加上(z-y)再同时除以2,得到两个...

Michael_GLF的博客 362

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

poj 2054 Color a Tree 据说是贪心

Bob is very interested in the data structure of a tree. A tree is a directed graph in which a special node is singled out, called the "root" of the tree, and there is a unique path from the root to each of the other nodes. Bob intends to color all the no

Lionel 1940

几道贪心题目 POJ1328 radar installation POJ2054 color a tree

POJ1328 radar installation 题目描述简单,阅读无障碍。用贪心求解。 贪心很容易迷惑人,一不小心就贪错了。我刚开始的想法。 1、对所有的岛,按x坐标从小到大排序 2、沿x轴从左向右开始,找到第一个还没有被覆盖的岛。以该岛为圆心、雷达覆盖范围d为半径

sj13051180的专栏 2989

color a tree【hdu1055】【POJ2054】贪心

POJ链接 hdu链接 Color a TreeProblem Description Bob is very interested in the data structure of a tree. A tree is a directed graph in which a special node is singled out, called the “root” of the tree,

function2的博客 766

POJ - 2054 Color a Tree【贪心】

【题目描述】 Bob is very interested in the data structure of a tree. A tree is a directed graph in which a special node is singled out, called the “root” of the tree, and there is a unique path from the roo...

inv0ker的博客 247

POJ - 2054 Color a Tree 贪心

题目描述 给定n个点 给出他们的权值, 并且给出他们的父子关系 现在给他们染色, 一个节点染色的消耗为 T*a[i], T为这个节点是第几次染色 a[i]为权值 根节点可以随时染色 问: 染色完需要全部节点的最小消耗 样例 Sample Input 5 1 1 2 1 2 4 1 2 1 3 2 4 3 5 0 0 Sample Output 33 思路 x 和 y 是父子关系 其他节点c...

正月看雪花的博客 206

poj2054-color a tree(贪心)

一个错误结论:尽量让权值最大的先被选走。 而我们可以很容易的构造出一个反例(不赘述了) 但由这个错误的结论,我们可以得到一个正确的结论:对于当前权值最大的点,一定在他父亲被染过色后第一个被染色,相当于是紧接着父亲被染色。 根据这个原则,我们可以把相邻染色的2个点都通过并查集合并成一个大的结点,得出他们的相对位置(拓扑序)然后再继续找下一个结点,这样每次合并都会少一个结点,最终只有一个结点的时...

Mmm040403的专栏 311

POJ2054Color a Tree(贪心)

Color a Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8297 Accepted: 2861 Description Bob is very interested in the data structure of a tree. A tree is a directed graph ...

indiewar's blogs(wust_lzl) 580

POJ 2054 贪心 !!! Color a Tree

http://poj.org/problem?id=2054 题意:给出n个节点和r根节点 给这些节点涂色,除根节点外每个节点都有一个父节点(and there is a unique path from the root to each of the other nodes.),每涂一个节点花费一个单位时间,涂子节点;每个节点都有权值ci, 涂完一个节点后花费的时间ti,那么该节点的...

weixin_30338743的博客 128

poj 2054 Color a Tree (贪心)

题目意思: 一棵树,每个节点都有 权重值 c[i], 依次给各个节点染色,只能先染父亲节点,再染孩子节点。每一秒钟染一个节点。定义 染色的代价为, 所有节点的 c[i] * T[i] 和(T[i] 表示染第i节点的时间)。 求出,最小的代价。 1、贪心的证明: 树中,除了根节点外,2权值最大的点,一定会在父亲节点被染色之后,马上染色 2、假如有 x, y, z 三个节点,x 和y是连续操作, 先x, y,后z ==> 代价 x + 2y + 3z 先z后xy, 代价 z + 2x + 3y 相减,等到

qq_38232157的博客 197

poj 2054 Color a Tree 贪心

//poj 2054 //sep9 #include using namespace std; const int MAXN=1024; int n,root,e_cnt; int vis[MAXN],num[MAXN],c[MAXN],prev[MAXN]; int head[MAXN],adj[MAXN],next[MAXN]; int find_root() { double maxx

sepNINE的专栏 656
上一篇: UOJ#37.【清华集训2014】主旋律 状压DP
下一篇: POJ 2185 Milking Grid next数组
NeighThorn
博客等级 码龄11年 20粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值