hdu1055
#include<iostream> 
#include<iomanip>  
#include<cstdio>  
#include<cstring>  
#include<algorithm>  
#include<cstdlib>  
#include<cmath>  
#include<map>  
#include<stack>  
#include<set>  
#include<queue>  
#include<string>  
#include<vector>  
#define eps 1e-6  
#define LL long long  
#define LD long double  
#define pi acos(-1.0)  
#define inf 1<<30  
using namespace std;  
struct Node{  
    int idx,next;  
}a[1005];  
int cnt,n,root,c[1005],num[1005],pre[1005],start[1005];  
bool visit[1005];  
int addedge(int u,int v){  
    a[cnt].idx=v;  
    a[cnt].next=start[u];  
    return cnt++;  
}  
int find_root(){  
    double mmax=0;  
    int k;  
    for(int i=1;i<=n;i++)  
        if(!visit[i]&&(double)c[i]/num[i]>mmax&&i!=root){  
            mmax=(double)c[i]/num[i];  
            k=i;  
        }  
    return k;  
}  
void Union(int k,int p){  
    num[p]+=num[k];  
    c[p]+=c[k];  
    for(int i=start[k];i;i=a[i].next)  
        pre[a[i].idx]=p;  
}  
int slove(){  
    int ans=0;  
    for(int i=1;i<n;i++){  
        int k=find_root();  
        visit[k]=true;  
        int p=pre[k];  
        while(visit[p]) p=pre[p];  
        ans+=num[p]*c[k];  
        Union(k,p);  
    }  
    return ans+c[root];  
}  
int main(){  
    while(scanf("%d%d",&n,&root)!=EOF&&n+root){  
        memset(start,0,sizeof(start));  
        memset(visit,false,sizeof(visit));  
        for(int i=1;i<=n;i++){  
            scanf("%d",&c[i]);  
            num[i]=1;  
        }  
        cnt=1;  
        for(int i=1;i<n;i++){  
            int u,v;  
            scanf("%d%d",&u,&v);  
            start[u]=addedge(u,v);  
            pre[v]=u;  
        }  
        printf("%d\n",slove());  
    }  
    return 0;  
}
hdu1055的更多相关文章
- Color a Tree[HDU1055]
		Color a Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ... 
- hdu-1055(贪心)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1055 题意:给一棵树涂色,这棵树的每个节点都有自己的价值Ci,涂色的原则是只由这个节点的父节点涂色之后 ... 
随机推荐
- Fidder工具抓包及篡改数据
			下载fiddler的最新版本: 运行fiddler之后测试要调试的页面是否可以捕获,刷新页面后左边列表会实时显示目前http请求的条目.如图红色部分 测试成功,开始断点捕获数据 点击菜单栏按钮[Rul ... 
- 算法(Algorithms)第4版 练习 1.4.5
			a. N b. 1 c. 1 d. N3 e. 1 f. 1 g. 1(0) 
- GIT使用[git remove untracked working file]
			使用GIT进行merge的时候, git merge --no-ff master 如果merge之后出现问题, 想进行回退, 可以使用 git reset --hard HEAD 来回退到最新的版本 ... 
- 现有exe转为服务_方式01
			1.安装X.exe服务: ...>路径\X.exe /install 2.卸载X.exe服务: ...>路径\X.exe /uninstall 3.开始运行XX(程序是X.exe,服务名是 ... 
- matlab之viscircles()函数
			函数功能:画圆 语法: viscircles(centers,radii) viscircles(ax,centers,radii) viscircles(___,Name,Value) h = vi ... 
- Delphi webservices 传数据
			数据集数据转换为XML function ReplaceString(AString: string): string; begin Result := StringReplace(AString, ... 
- jQuery-中的事件
			[jQuery中的事件] javascript和html之间的交互是通过用户和浏览器操作页面时引发的事件来处理的,虽然传统的javascript能完成这些交互,但事jQuery增加并扩充了基本事件处理 ... 
- TCP/IP 详解卷一 - TCP  CWR、ECE、URG、ACK、PSH、RST、SYN、FIN控制位
			from:https://blog.csdn.net/u012243115/article/details/43487461 2015年02月04日 15:56:32 阅读数:1464 TCP 和 U ... 
- QTableWidget设计原则
			一.组成结构: 列表控件由水平表头(self.horizontalHeader()).垂直表头(self.verticalHeader())和单元格(QTableWidgetItem)组成 其中表头又 ... 
- OpenCV——百叶窗
			参考: PS 图像特效,百叶窗 // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLU ... 
