题目描述

Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。每个奶牛居住在 N(1<=N<=100,000) 个农场中的一个,这些农场由N-1条道路连接,并且从任意一个农场都能够到达另外一个农场。道路i连接农场A_i和B_i(1 <= A_i <=N; 1 <= B_i <= N),长度为L_i(1 <= L_i <= 1,000)。集会可以在N个农场中的任意一个举行。另外,每个牛棚中居住者C_i(0 <= C_i <= 1,000)只奶牛。在选择集会的地点的时候,Bessie希望最大化方便的程度(也就是最小化不方便程度)。比如选择第X个农场作为集会地点,它的不方便程度是其它牛棚中每只奶牛去参加集会所走的路程之和,(比如,农场i到达农场X的距离是20,那么总路程就是C_i*20)。帮助Bessie找出最方便的地点来举行大集会。 考虑一个由五个农场组成的国家,分别由长度各异的道路连接起来。在所有农场中,3号和4号没有奶牛居住。 

输入

第一行:一个整数N * 第二到N+1行:第i+1行有一个整数C_i * 第N+2行到2*N行,第i+N+1行为3个整数:A_i,B_i和L_i。

输出

* 第一行:一个值,表示最小的不方便值。

样例输入

5
1
1
0
0
2
1 3 1
2 3 2
3 4 3
4 5 3

样例输出

15
这是一道入门的树上问题。首先说一下暴力,以每一个点为根对整棵树做一遍dfs,最后找出最优解,时间复杂度是O(n^2)。但显然并不用这么麻烦,对于以i为集会点的结果,如果把集会点移向与i相连的点j,那么,把这条连接i与j的边断开后可以把整个树变成两个联通块。把集会点从i移向j后,i所在联通块所有点费用要加上这条边边权费用,j所在联通块所有点费用要减掉这条边边权的费用。那么只要处理出一个点的结果,再O(n)转移就可以了。以一个点为根,dfs向子节点转移,对于一个节点i转移到它的一个子节点j,两个联通块节点数分别是以j为根的子树节点数和总节点数-以j为根的子树节点数。
最后附上代码。
#include<queue>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
long long size[100010];
int head[100010];
int next[200010];
int to[200010];
long long val[200010];
int f[100010];
long long s[100010];
long long a[100010];
int x,y;
long long v;
int n;
int tot;
long long sum;
long long ans;
void add(int x,int y,long long v)
{tot++;next[tot]=head[x];head[x]=tot;to[tot]=y;val[tot]=v;
}
void dfs(int x,int fa)
{f[x]=fa;for(int i=head[x];i;i=next[i]){if(to[i]!=fa){dfs(to[i],x);size[x]+=size[to[i]];}}
}
void dfs2(int x,long long dep)
{ans+=dep*a[x];for(int i=head[x];i;i=next[i]){if(to[i]!=f[x]){dfs2(to[i],dep+val[i]);}}
}
void find(int x)
{for(int i=head[x];i;i=next[i]){if(to[i]!=f[x]){s[to[i]]=s[x]-size[to[i]]*val[i]+(sum-size[to[i]])*val[i];find(to[i]);}}
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld",&size[i]);a[i]=size[i];sum+=size[i];}for(int i=1;i<n;i++){scanf("%d%d%lld",&x,&y,&v);add(x,y,v);add(y,x,v);}dfs(1,1);dfs2(1,0ll);s[1]=ans;find(1);ans=1ll<<62;for(int i=1;i<=n;i++){ans=min(ans,s[i]);}printf("%lld",ans);
}

转载于:https://www.cnblogs.com/Khada-Jhin/p/9135282.html

BZOJ1827[USACO 2010 Mar Gold 1.Great Cow Gathering]——树形DP相关推荐

  1. USACO 2008 Jan Gold 3.Cell Phone Network 树形dp

    本题的大意就是在一棵树上选一些节点,被选中的节点可以覆盖他相 邻的点,问最少需要放几个节点\text{本题的大意就是在一棵树上选一些节点,被选中的节点可以覆盖他相 邻的点,问最少需要放几个节}\\\t ...

  2. BZOJ3075[USACO 2013 Mar Gold 3.Necklace]——AC自动机+DP

    题目描述 给你一个长度为n的字符串A,再给你一个长度为m的字符串B,求至少在A中删去多少个字符才能使得B不是A的子串.注:该题只读入A和B,不读入长度,先读入A,再读入B.数据保证A和B中只含小写字母 ...

  3. BZOJ1782[USACO 2010 Feb Gold 3.Slowing down]——dfs+treap

    题目描述 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1-N)从粮仓走向他的自己的牧场.牧场构成了一棵树,粮仓在1号牧场.恰好有N-1条道路直接连接着牧场, ...

  4. bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会【树形dp】

    不能用read会TLE!!不能用read会TLE!!不能用read会TLE!! 一开始以为要维护每个点,线段树写了好长(还T了-- 首先dfs一遍,求出点1为集会地点的答案,处理处val[u]为以1为 ...

  5. 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 510   ...

  6. bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 821   ...

  7. [USACO 2010 Feb S]Chocolate Eating

    题目: [USACO 2010 Feb S]Chocolate Eating ,哈哈,我们今天来看一道二分答案的题嘛,这是选自USACO上的一道题,好了,我们一起来看看题意吧: 题目描述是复制的,可能 ...

  8. BSOJ4217 【USACO 2013 Feburary Gold】旅行线路 DP(双路递推)

    4217 -- [USACO 2013 Feburary Gold]旅行线路 Description 贝西经营着一家旅行社,一天贝西带着几队游客沿着亚马逊河旅行,河的两边分布着一些景点,每个景点都对应 ...

  9. 题解 | #[USACO 2012 Mar S]Flowerpot#

    题解 | #扑克牌大小# import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main { p 题解 | #密码截 ...

  10. HYSBZ-5485【思维】[Usaco2018 Dec]The Cow Gathering

    HYSBZ-5485[Usaco2018 Dec]The Cow Gathering 题目 ◇题目传送门◆ 题目大意 给定一棵树与一些限制(u,v)(u,v)(u,v),要求从叶节点开始删除节点,并且 ...

最新文章

  1. android手机数字取证,基于Android智能终端微信应用的数字取证分析模型的研究
  2. 关于captive portal
  3. 浏览器支持java_为什么我下载了java并提示浏览器不支持j
  4. RabbitMQ批量确认发布
  5. 嵌入式开发linux工具,嵌入式Linux开发入门之MfgTool工具的使用
  6. 按压缩格式整理打包(解包)和压缩(解压)命令
  7. ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能
  8. hdu 4381(背包变形)
  9. [转载]一个发生在亚洲服务器上的真实故事!
  10. mondrian olap 示例_详解OLAP概念、基本内容、特点、分类
  11. fastdfs windows部署_从零搭建分布式文件系统MinIO比FastDFS要更合适
  12. JSP页面报错:“Uncaught SyntaxError: Unexpected token ”
  13. tomcat报错:This is very likely to create a memory leak问题解决
  14. 实战java虚拟机配套代码
  15. 比较sql server两个数据库
  16. python写ppt_python可以写PPT吗
  17. Stata:中介效应理论及sgmediation命令做sobel检验
  18. PS2游戏手柄——基于STC15W4K32S4
  19. 关于癌症的思考:癌症的本质是什么
  20. Contextual Transformer Networks for Visual Recognition

热门文章

  1. Facebook的图片搜索技术揭秘
  2. Spring 核心框架体系结构
  3. Data Binding 实践
  4. 薄荷Toolbar(ActionBar)的适配方案
  5. Emscripten 单词_人教版英语八年级上册听力(单词+课文) 朗读录音听力mp3音频电子课本(完整版)...
  6. php 可逆加密方法
  7. scala文件通过本地命令运行
  8. python第三篇:python、flask关系映射
  9. css案例学习之父子块的margin
  10. ubuntu 上的python不能解析jpeg,png?