hdu 1055 Color a Tree

Color a Tree

       题意:每个节点有一个权值,从根节点开始着色,每一个被着色的节点,其父亲一定已经被着色了,根据着色顺序得到一个序列,求最小的序列对应的权值的乘积和最小;

       分析:寻找最大权值,合并这个节点和他的父亲节点,记下这两个节点的拓扑序列,同时新节点的权值为这些节点的算术平均值,直到只有一个节点。

 

       证明:http://hi.baidu.com/cheezer94/blog/item/d98eca065202a2f237d122da.html

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#define INF 1E9
using namespace std;
double v[1010];
int num[1010],q[1010];
bool cmp(int a,int b)
{
    return v[a]/num[a]>v[b]/num[b];
}
int ff[1010],ss[1010],fa[1010];
int n,r,val[1010];
int farther(int i)
{
    if(ff[i]==i)return i;
    return ff[i]=farther(ff[i]);
}
int son(int i)
{
    if(ss[i]==i)return i;
    return son(ss[i]);
}
bool input()
{
    scanf("%d%d",&n,&r);
    if(n==0&&r==0)return 0;
    int i,f,s;
    r--;
    for(i=0;i<n;i++)
    {
        scanf("%d",&val[i]);
        fa[i]=ff[i]=ss[i]=q[i]=i;
        num[i]=1;v[i]=val[i]*1.0;
    }
    for(i=1;i<n;i++)
    {
        scanf("%d%d",&f,&s);
        fa[s-1]=f-1;
    }
    return 1;
}
void solve()
{
    int ans=0,k=1,i,now,t;
    for(i=0;i<n;i++)//取出比值最大的没被访问的点。
    {
        sort(q+i,q+n,cmp);
        now=q[i];t=son(fa[now]);
        if(now==r)continue;
        ss[t]=now;ff[now]=t;
        t=farther(now);
        v[t]+=v[now];num[t]+=num[now];
    }
    while(n--)
    {
        ans+=val[r]*(k++);
        r=ss[r];
    }
    printf("%d\n",ans);
}
int main()
{
    while(input())solve();
    return 0;
}
时间: 2024-10-24 04:53:06

hdu 1055 Color a Tree的相关文章

HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)

链接: HDU : http://acm.hdu.edu.cn/showproblem.php?pid=2489 POJ  : http://poj.org/problem?id=3925 题目: Problem Description For a tree, which nodes and edges are all weighted, the ratio of it is calculated according to the following equation. Given a comp

hdu 1556 Color the ball

点击打开hdu 1556 思路; 树状数组 分析: 1 简单的区间更新,单点查询问题 代码: /*********************************************** * By: chenguolin * * Date: 2013-08-20 * * Address: http://blog.csdn.net/chenguolinblog * ***********************************************/ #include<cstdio>

hdu 1556 Color the ball 树状数组

    最基本的树状数组,成段更新,感觉只要构造的时候保证两端平衡,即对后面非更新地方无影响即可,所以这题是a++ (b+1)--    温习了下快速IO,速度果然提升1倍 /* author:jxy lang:C/C++ university:China,Xidian University **If you need to reprint,please indicate the source** */ #include <iostream> #include <cstdio> #

HDOJ/HDU 1556 Color the ball(树状数组)

Problem Description N个气球排成一排,从左到右依次编号为1,2,3-.N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮他算出每个气球被涂过几次颜色吗? Input 每个测试实例第一行为一个整数N,(N <= 100000).接下来的N行,每行包括2个整数a b(1 <= a <= b <= N

树状数组专题【完结】

1 国外的论文点击打开链接 2 我的总结点击打开链接 任何能够造成树状数组下表为0的操作都会使得程序TLE,这是个很重要的地方! 第一题 poj 2299 Ultra-QuickSort 点击打开poj 2299 思路: 离散化+树状数组 分析: 1 题目的意思就是要求逆序数对 2 题目的输入个数有500000的规模但是每个数的最大值为999999999,因此我们需要离散化这些数据 3 对于数据9 1 0 5 4我们离散化成5 2 1 4 3 那么对于输入一个树a[i]我们去求一下它的离散化后的

VML绘图板②脚本--VMLgraph.js、XMLtool.js

js|xml|脚本 脚本************** VMLgraph.js*************var xo=0;var yo=0;var ox=80;var oy=20;var dx=0;var dy=0;var drawKey = false;var itemID = 0;var ShapeItemNum = 0;var ShapeItemX = 0;var ShapeItemY = 0;var CurveItemNum = 0;var NodeDelete = false;var T

《程序设计解题策略》——1.4 利用改进型的二叉查找树优化动态集合的操作

1.4 利用改进型的二叉查找树优化动态集合的操作 我们知道,二叉查找树(binary search tree)能够支持多种动态集合操作,因此在程序设计竞赛中,二叉查找树起着非常重要的作用,它可以用来表示有序集合.建立索引或优先队列等.作用于二叉查找树上的基本操作时间是与树的高度成正比的:对于一棵含n个节点的二叉查找树,如果呈完全二叉树结构,则这些操作的最坏情况运行时间为O(log2n):但如果呈线性链结构,则这些操作的最坏情况运行时间退化为O(n).针对二叉查找树这种不平衡.不稳定的弊病,人们做

VML绘图板②脚本--VMLgraph.js、XMLtool.js_php基础

脚本************** VMLgraph.js*************var xo=0;var yo=0;var ox=80;var oy=20;var dx=0;var dy=0;var drawKey = false;var itemID = 0;var ShapeItemNum = 0;var ShapeItemX = 0;var ShapeItemY = 0;var CurveItemNum = 0;var NodeDelete = false;var ToolBarNum

Laravel 5 中基于 jQuery 实现分层级的类目树结构方法

今天,我要来分享下如何在Laravel 5中通过jQuery实现动态类目树结构:有些时候我们确实需要为类目及其子类目生成树结构以便于使用. 在本教程中,我只是简单在Laravel应用中创建一个"categories"表并通过一个嵌套的树结构来管理父类目和子类目.我使用jQuery来生成树视图布局,使用类目模型为层级数据设置关联关系,还为在类目树中创建新类目添加了表单. 在正式开始之前,先贴上最终效果图: laravel-category-tree-view 下面正式开始开发之路. 第一