这道题整了一下午,最后还是看别人的解题报告弄出来的,先说说我的理解吧。大体处理思路是利用贪心思想,每次取权值最大的节点,不断的将权值最大节点与它的父节点合并。

过程:

1、初始时将序列中的time[i]都置为1,w[i]置为c[i];

2、查找最大的w[i], 返回其位置;

3、将该位置的c[]与它的父节点c[]合并(合并过程就是C_i / T_i,C_i = c[该节点] + c[父节点],T_i = time[该节点]+time[父节点])得到新的父节点w[](w[父节点] = C_i / T_i),如果有节点与pos相连,让它指向pos的父节点;

4、重复2、3,知道合并完;

至于如何求出结果:初始时使ans = sum(c[i]);每次查找到一个最大权值,ans += c[i] * time[父节点];

具体代码如下:

#include <iostream>#include <cstdio>

using namespace std;

const int N = 1007;

struct node{int t;    //time[]    int p;    //记录父节点    int c;    //c[]    double w;    //w[]}num[N];

int n, r;

int find()    //查找最大的权值,返回其位置{int pos;double max = 0;for(int i = 1; i <= n; i++)if(num[i].w > max && i != r)    //pos不能为根节点        {            max = num[i].w;            pos = i;        }return pos;}

int main(){//freopen("data.in", "r", stdin);    int i, j, a, b, pos, ans, f;while(scanf("%d%d", &n, &r), n||r)    {        ans = 0;for(i = 1; i <= n; i++)        {            scanf("%d", &num[i].c);                num[i].w = num[i].c;    //初始时w[i]置为c[i];            num[i].t = 1;        //time[i] 置为1;            ans += num[i].c;    //初始ans = sum(c[i]);        }for(i = 1; i < n; i++)        {            scanf("%d%d", &a, &b);            num[b].p = a;    //记录父节点,建立树关系        }        i = n;while(i > 1)        {            pos = find();    //找到最大权值的位置            num[pos].w = 0;        //找到后将之置0,否则影响下次查找。            f = num[pos].p;        //f为父节点            ans += num[pos].c * num[f].t;    //将找到的c[pos]*time[f]加入ans            for(j = 1; j <= n; j++)if(num[j].p == pos)                    num[j].p = f;    //如果有节点与pos相连,让它指向pos的父节点            num[f].c += num[pos].c;        //C_i = c[该节点] + c[父节点]            num[f].t += num[pos].t;        //T_i = time[该节点]+time[父节点]            num[f].w = (double)num[f].c/num[f].t;    //合并后的f节点的权值            i--;        }        printf("%d\n", ans);    }return 0;}

转载于:https://www.cnblogs.com/vongang/archive/2011/08/19/2146070.html

HDU_1055 POJ_2054 Color a Tree(贪心)相关推荐

  1. POJ 2054 Color a Tree (贪心)

    $ POJ~2054~Color~a~Tree $ $ solution: $ 我们先从题中抽取信息,因为每个点的费用和染色的次数有关,所以我们可以很自然的想到先给权值大的节点染色.但是题目还说每个节 ...

  2. UPC1430 Color a Tree(贪心)

    链接:http://exam.upc.edu.cn/problem.php?cid=1430&pid=19 题意: 一棵树,n个节点,n-1条边,每个节点有权值val.Time为当前时间,初始 ...

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

  4. POJ 2054 Color a Tree

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

  5. HDU 6241 Color a Tree

    Color a Tree 题目大意:一棵树,根为1.某些点有一些限制.限制A: 该$x_i$点子树染色点至少$y_i$个. 限制B: 该$x_i$点子树外染色至少$y_i$个.求最少染色点数. 首先是 ...

  6. nyoj 791 Color the fence(贪心)

    Color the fence 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 Tom has fallen in love with Mary. Now Tom wan ...

  7. PKU/POJ 2054 Color a Tree

    关于树的着色. 要求从根节点出发, 遍历整棵树, 要求代价最小. 访问每个节点的代价V[i] = F[i] * C[i], C[i]为已知的值, F[i]则为访问该节点的时间. 每一步只能从已访问的节 ...

  8. Color a Tree

    http://icpc.upc.edu.cn/problem.php?cid=1430&pid=19 结论1:对于一个非根结点,它具有非根结点的最大权值,那么访问完它的父亲后就要立即访问它才能 ...

  9. 《算法竞赛进阶指南》刷题记录

    总算闲下来一些辣!然后最近发现其实看书是真真很有效但是一直没有落实!所以决定落实一下这段时间把这本书看完题目做完! 然后发现还有挺多题目挺巧妙的于是一堆博客预警,,,可能最近会写很多比较水(但是我还是 ...

最新文章

  1. 参数量下降85%,性能全面超越ViT:全新图像分类方法ViR
  2. CocosCreator上的游戏(调试)发布到微信小程序
  3. [BUUCTF-pwn]——bjdctf_2020_babyrop
  4. 华为p40pro怎么用鸿蒙,数码知识:华为p40pro是鸿蒙系统吗系统版本
  5. Android开发学习笔记:浅谈Content Provider
  6. mybatis学习(4):工具类和实体类的创建
  7. centos最小化安装后部署中文输入法
  8. Azure Services Bus(服务总线)中的工作流(workflow)
  9. 连接linux常用的工具
  10. MacOS:Shell工具-Royal TSX
  11. MediaExtractor、MediaMuxer 分离和合成 mp4
  12. fspecial,imfilter
  13. BZOJ5369-[Pkusc2018]最大前缀和
  14. pycharm方法中划线解决方法
  15. 安装新的package后出现异常错误
  16. 海盗湾(The Pirate Bay)的战争——每一名技术人员都应该思考的问题
  17. 鸿蒙系统怎么安装网易云音乐,网易云音乐鸿蒙版app下载-网易云音乐鸿蒙版最新版下载v1.7.5-IT168下载站...
  18. 天津理工大学2018年计算机硕士真题
  19. 雅思和托福的区别(转)
  20. 检查凭证录入模板的核算项目研发项目是否录入

热门文章

  1. 2020年十大黑科技:新冠疫苗当仁不让,脑机接口引领风潮
  2. 深度对话字节火山引擎:进军云服务的初心、决心与信心
  3. 二叉树层序遍历(宽度优先遍历bfs--队列)
  4. 升级鸿蒙的好处,首批升级鸿蒙的评价出炉,“差评”很真实
  5. 如何快速发现及解决网络环路问题
  6. 什么是画中画模式,画中画视频怎么操作
  7. springboot项目中使用Echarts实现数据折现可视化
  8. 78系列79系列稳压芯片
  9. jzoj1082劲乐团
  10. 怎么给java代码瘦身_Eclipse Xtend对Java说:我帮你瘦身