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,涂色的原则是只由这个节点的父节点涂色之后 ...
随机推荐
- spring boot项目多环境配置文件设置
具体做法: 不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.properties中:prod环境下的配置配置在application-prod.prope ...
- 用python实现的抓取腾讯视频所有电影的爬虫
1. [代码]用python实现的抓取腾讯视频所有电影的爬虫 # -*- coding: utf-8 -*-# by awakenjoys. my site: www.dianying.atim ...
- Linux课程---8、Linux启动流程
Linux课程---8.Linux启动流程 一.总结 一句话总结: grub启动引导界面(比如装了多系统,选择系统),找到linux内核 启动init程序,加载各种驱动 1.进入grub界面选择相应的 ...
- Serblet 过滤器(Filter)
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 过滤器的作用: 1.身份验证过滤器 2.日志记录和审核过滤器 3.触发资源访问事件过滤器. 等等等... Ser ...
- Log4j_学习_00_资源帖
一.log4j2 1. log4j使用教程详解(怎么使用log4j2) 2.Log4j2的基本使用 二.log4j 1.[转]最详细的Log4J使用教程 2.最详细的Log4j使用教程 3.log4j ...
- Linux-NoSQL之MongoDB
1.mongodb介绍 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoD ...
- IO - 同步,异步,阻塞,非阻塞 (转帖:http://blog.csdn.net/historyasamirror/article/details/5778378)
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...
- 在开发环境中,自己搭建一个ssl环境(小例子)
做项目的时候自己总结的一些小例子 public class Test { public static void setSSLProperty() { Security.addProvider(new ...
- 【论文笔记】基于图机构的推荐系统:Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba
论文:https://arxiv.org/abs/1803.02349 题外话: 阿里和香港理工联合发布的这篇文章,整体来说,还挺有意思的. 刚开始随便翻翻看看结构图的时候,会觉得:这也能发文章 ...
- tensorflow训练验证码识别模型
tensorflow训练验证码识别模型的样本可以使用captcha生成,captcha在linux中的安装也很简单: pip install captcha 生成验证码: # -*- coding: ...