hdu-1055(贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1055
题意:给一棵树涂色,这棵树的每个节点都有自己的价值Ci,涂色的原则是只由这个节点的父节点涂色之后才能涂色(就是从根节点开始涂色)。
每次涂色用时1s,每个节点的涂色花费是Ci*Fi(Fi是从最开始到涂色到这个节点所花的时间)。对这棵树涂色的总涂色花费为sum,
求怎样涂色才能使sum最小。
思路:
结论:对于一个非根节点,它具有最大的权值,只有先访问完它的父节点再访问它才能使总花费最小。
1、建立一个结构体,c表示节点价值,fa表示父节点,t表示耗时,ans为总花费,初始化为sum(ci),表示每个节点自己涂色。
2、找到最大的非根节点m,然后找到它的父节点p,将m与p合并。ans+=vc[m].c*vc[p].t,表示从m到p这段路上的代价,然后
vc[p].c+=vc[m].c; vc[p].t+=vc[m].t; vc[p].w=1.0*vc[p].c/vc[p].t;
3、重复n-1次,因为有n个节点,n-1后合并为1个节点。
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
struct Node{
int fa,c,t;
double w;
};
Node vc[];
int fd(int n,int r)
{
int i,j,p;
double mx=-1.0;
for(i=;i<=n;i++)
{
if(i!=r&&vc[i].w>mx)
{
mx=vc[i].w;
p=i;
}
}
return p;
} int main(void)
{
int n,r,i,j,ans,p,m,x,y;
while(~scanf("%d %d",&n,&r))
{
if(n==&&r==) break;
ans=;
for(i=;i<=n;i++)
{
scanf("%d",&vc[i].c);
vc[i].t=;
vc[i].w=vc[i].c;
ans+=vc[i].c;
}
for(i=;i<n;i++)
{
scanf("%d %d",&x,&y);
vc[y].fa=x;
}
for(i=;i<n;i++)
{
m=fd(n,r);
p=vc[m].fa;
vc[m].w=;
ans+=vc[m].c*vc[p].t;
for(j=;j<=n;j++)
if(vc[j].fa==m) vc[j].fa=p;
vc[p].c+=vc[m].c;
vc[p].t+=vc[m].t;
vc[p].w=1.0*vc[p].c/vc[p].t;
}
printf("%d\n",ans);
}
return ;
}
hdu-1055(贪心)的更多相关文章
- Hdu 5289-Assignment 贪心,ST表
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Assignment Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 4803 贪心/思维题
http://acm.hdu.edu.cn/showproblem.php?pid=4803 话说C++还卡精度么? G++ AC C++ WA 我自己的贪心策略错了 -- 就是尽量下键,然后上 ...
- hdu 1735(贪心) 统计字数
戳我穿越:http://acm.hdu.edu.cn/showproblem.php?pid=1735 对于贪心,二分,枚举等基础一定要掌握的很牢,要一步一个脚印走踏实 这是道贪心的题目,要有贪心的意 ...
- hdu 4974 贪心
http://acm.hdu.edu.cn/showproblem.php?pid=4974 n个人进行选秀,有一个人做裁判,每次有两人进行对决,裁判可以选择为两人打分,可以同时加上1分,或者单独为一 ...
- hdu 4982 贪心构造序列
http://acm.hdu.edu.cn/showproblem.php?pid=4982 给定n和k,求一个包含k个不相同正整数的集合,要求元素之和为n,并且其中k-1的元素的和为完全平方数 枚举 ...
- HDU 2307 贪心之活动安排问题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2037 今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 1052 贪心+dp
http://acm.hdu.edu.cn/showproblem.php?pid=1052 Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS ...
- HDU 2111 Saving HDU【贪心】
解题思路:排序后贪心,和fatmouse's trade 类似 Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: ...
- HDU 2831 (贪心)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2831 题目大意:植物大战僵尸.给定种植植物时间间隔t,以及每个僵尸的到达时间v,生命d.问是否能赢. ...
- HDU 3090 (贪心)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3090 题目大意:一共n段路.每段路每千米都会被抢劫一定数量,可以雇佣武士护卫m千米.问最少被抢劫数量 ...
随机推荐
- jquery ajax 赋值问题, 后面程序判断逻辑用
添加async:false; 像 $.get() 等是没有async参数的, 所以需要用到如下 $.ajaxSetup({ async : false //这个意思是等这个ajax有了返回值后才会执行 ...
- vue-cli 上手
1.cnpm install --global vue-cli 安装脚手架 2.vue init webpack baoge 创建 3.选择配置项 Project name (baoge): ---- ...
- GPU寄存器相关
1,shader model 3.0 只有256个常量寄存器,32个临时寄存器.对应dx9, opengl2.0, opengles2.0 2,shader model 4.0 有65536个寄存器, ...
- 【348】通过 Numpy 创建各式各样的矩阵
参考:NumPy之array-一个程序媛的自我修养-51CTO博客 参考:numpy中数组和矩阵的区别 - jiangsujiangjiang的博客 - CSDN博客 一.使用系统方法 二.用指定的数 ...
- 实现溢出文本eclipsis的解决
实现溢出文本eclipsis的解决:overflow:hidden;text-overflow:ellipsis; white-space:nowrap; 如:<a href="&qu ...
- Mysql修改密码办法
方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...
- gff/gtf格式
1)gff3及gtf2简介 一个物种的基因组测序完成后,需要对这些数据进行解读,首先要先找到这些序列中转录起始位点.基因.外显子.内含子等组成元件在染色体中的位置信息(即注释)后才能再进行深入的分析. ...
- HttpClient 4 和 HttpClient 3 超时
HttpClient 4: 连接超时: httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,6000 ...
- php71 gdnz
更新yum库:yum updat yum install epel-release yum install -y gcc gcc-c++ autoconf libjpeg libjpeg-devel ...
- Hammer.js——给bootstrap添加触屏功能
Hammer.js qq群号(html5技术交流):158677025 手机端演示二维码(或直接在手机中输入网址:http://lilinfeng.cncoder.me 浏览效果): 一.前言 移 ...