poj2054 Color a Tree
是看着别人的博客来写的。。学习他的方法吧。第二题了哦,加油加油。 要看看去贪心算法咯
博客原文 POJ原题
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1010
int n,r;
int c[MAXN];
int parent[MAXN];
bool visited[MAXN];
int next[MAXN];
int prev[MAXN];
int rank[MAXN];
int sum[MAXN];
int find()
{double max=0;int i,flg=-1;for(i=1;i<=n;i++)if(max<sum[i]*1.0/rank[i] && !visited[i]){max=sum[i]*1.0/rank[i];flg=i;}return flg;
}
void uni(int x)
{//合并节点,并把他们按顺序排好int i;for(i=parent[x];prev[i]!=-1;i=prev[i]); //合并节点rank[i]+=rank[x];sum[i]+=sum[x];for(i=parent[x];next[i]!=-1;i=next[i]); //排序,接到最后一个节点上next[i]=x;prev[x]=i;visited[x]=true;
}int main()
{while(scanf("%d %d",&n,&r),n && r){int i;for(i=1;i<=n;i++){scanf("%d",&c[i]);visited[i]=false;prev[i]=next[i]=-1;rank[i]=1; //合并后,集合中的规模sum[i]=c[i]; //集合的和}for(i=1;i<n;i++){ //输入n-1个节点的父子关系int a,b;scanf("%d %d",&a,&b);parent[b]=a;}visited[r]=true;while(true){int u=find();if(u==-1)break;uni(u);}int cnt=0,ans=0; //cnt用于记录时间for(i=r;i!=-1;i=next[i])ans+=(++cnt)*c[i];printf("%d\n",ans);}return 0;
}
转载于:https://www.cnblogs.com/Jason-Damon/archive/2011/11/06/2238003.html
poj2054 Color a Tree相关推荐
- 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 spe ...
- POJ 2054 Color a Tree (贪心)
$ POJ~2054~Color~a~Tree $ $ solution: $ 我们先从题中抽取信息,因为每个点的费用和染色的次数有关,所以我们可以很自然的想到先给权值大的节点染色.但是题目还说每个节 ...
- POJ 2054 Color a Tree
贪心.... Color a Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: ...
- HDU 6241 Color a Tree
Color a Tree 题目大意:一棵树,根为1.某些点有一些限制.限制A: 该$x_i$点子树染色点至少$y_i$个. 限制B: 该$x_i$点子树外染色至少$y_i$个.求最少染色点数. 首先是 ...
- PKU/POJ 2054 Color a Tree
关于树的着色. 要求从根节点出发, 遍历整棵树, 要求代价最小. 访问每个节点的代价V[i] = F[i] * C[i], C[i]为已知的值, F[i]则为访问该节点的时间. 每一步只能从已访问的节 ...
- HDU_1055 POJ_2054 Color a Tree(贪心)
这道题整了一下午,最后还是看别人的解题报告弄出来的,先说说我的理解吧.大体处理思路是利用贪心思想,每次取权值最大的节点,不断的将权值最大节点与它的父节点合并. 过程: 1.初始时将序列中的time[i ...
- UPC1430 Color a Tree(贪心)
链接:http://exam.upc.edu.cn/problem.php?cid=1430&pid=19 题意: 一棵树,n个节点,n-1条边,每个节点有权值val.Time为当前时间,初始 ...
- Color a Tree
http://icpc.upc.edu.cn/problem.php?cid=1430&pid=19 结论1:对于一个非根结点,它具有非根结点的最大权值,那么访问完它的父亲后就要立即访问它才能 ...
- POJ2777 Count Color 线段树区间更新
题目描写叙述: 长度为L个单位的画板,有T种不同的颜料.现要求按序做O个操作,操作分两种: 1."C A B C",即将A到B之间的区域涂上颜色C 2."P A B&qu ...
- CodeForces - 620E New Year Tree(线段树+dfs序+状态压缩)
题目链接:点击查看 题目大意:给出一棵无向树,每个节点都有一种颜色,接下来时m次操作: 1 x y:将x及其子树染成y的颜色 2 x:查询x及其子树上共有多少种不同的颜色 题目分析:看完这个题的第一反 ...
最新文章
- Cocos Creator中的动画支持技术
- Expo大作战(十二)--expo中的自定义样式Custom font,以及expo中的路由RouteNavigation
- 编写Web前端代码的注意事项
- PowerDesigner(九)-模型文档编辑器(生成项目文档)
- net core上传文件异常:Multipart body length limit 16384 exceeded.
- 前端那些事之日历多选插件篇
- QT 中控件内坐标转换为父窗口坐标或屏幕坐标
- 易语言 精易模块 网页_访问 获取显示验证码图片
- 教你如何批量下载QQ相册或是手机相册里原照片
- 利用echart和echart-gl绘制江苏省的地图之二
- python小组项目总结报告_项目总结报告多篇汇总
- Ubuntu突然无法解析域名解决
- pb rows changed between retrieve and update的问题
- binlog_do_db 与 binlog_ignore_db
- 什么牌子的蓝牙耳机音质好?音质超好的蓝牙耳机测评
- vim使用gf(go file)跳转文件
- 【绘制】HTML5 Canvas 中渐变色和图案(图文、示例)
- int *p = a、p = a、*p = a的正确理解
- 2020年中国眼科诊断器械行业发展现状及主要企业数据分析,近视人群年轻化加剧带动眼科诊断设备行业发展「图」
- 方钢管弹性模量计算方式_普通方钢承重计算公式