BZOJ 1827 [Usaco2010 Mar]gather 奶牛大集会(树形DP)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1827
【题目大意】
给出一棵有点权和边权的树,
请确定一个点,使得每个点到这个点的距离乘上该点乘积的总和最小。
【题解】
定1为根,我们先计算当这个点为1的时候的值,同时记录每个子树的size
之后我们再做一遍dfs,计算出每个点作为中心时候的答案
我们发现当一个点从父节点往子节点移动的时候
对于答案的变化是ans+=(size[1]-2*size[x])*len(fx->x)
所以我们dfs计算,保留最小值即可。
【代码】
#include <cstdio>
#include <algorithm>
#include <vector>
#include <utility>
using namespace std;
const int N=100010;
typedef pair<int,int> P;
typedef long long LL;
vector<P> v[N];
int d[N],size[N],n;
LL ans,ans1;
void dfs(int x,int fx){
for(int i=0;i<v[x].size();i++){
int y=v[x][i].first,z=v[x][i].second;
if(y!=fx){
d[y]=d[x]+z;
ans+=(LL)size[y]*d[y];
dfs(y,x);
size[x]+=size[y];
}
}
}
void dfs2(int x,int fx){
for(int i=0;i<v[x].size();i++){
int y=v[x][i].first,z=v[x][i].second;
if(y!=fx){
ans1+=(LL)(size[1]-2*size[y])*z;
if(ans1<ans)ans=ans1;
dfs2(y,x);
ans1-=(LL)(size[1]-2*size[y])*z;
}
}
}
int main(){
while(~scanf("%d",&n)){
ans=ans1=0;
for(int i=1;i<=n;i++)scanf("%d",&size[i]);
for(int i=1;i<n;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
v[a].push_back(P(b,c));
v[b].push_back(P(a,c));
}dfs(1,-1);ans1=ans;
dfs2(1,-1);
printf("%lld\n",ans);
}return 0;
}
BZOJ 1827 [Usaco2010 Mar]gather 奶牛大集会(树形DP)的更多相关文章
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP
[Usaco2010 Mar]gather 奶牛大集会 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会 树形DP + 带权重心
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
- 【树形DP/搜索】BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会
1827: [Usaco2010 Mar]gather 奶牛大集会 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 793 Solved: 354[Sub ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会( dp + dfs )
选取任意一个点为root , size[ x ] 表示以 x 为根的子树的奶牛数 , dp一次计算出size[ ] && 选 root 为集会地点的不方便程度 . 考虑集会地点由 x ...
- 【BZOJ1827】[Usaco2010 Mar]gather 奶牛大集会 树形DP
[BZOJ][Usaco2010 Mar]gather 奶牛大集会 Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来 ...
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会
Description Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来举办这次集会.每个奶牛居住在 N(1<=N<=100,0 ...
- bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会【树形dp】
不能用read会TLE!!不能用read会TLE!!不能用read会TLE!! 一开始以为要维护每个点,线段树写了好长(还T了-- 首先dfs一遍,求出点1为集会地点的答案,处理处val[u]为以1为 ...
- 【BZOJ】1827: [Usaco2010 Mar]gather 奶牛大集会(树形dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1827 仔细想想就好了,, 每个点维护两个值,一个是子树的费用,一个是除了子树和自己的费用.都可以用d ...
- 【BZOJ】1827: [Usaco2010 Mar]gather 奶牛大集会
[算法]树型DP||树的重心(贪心) [题解] 两遍DFS,第一次得到所有节点子树的路径和,第二次给出除了该子树外其它部分的路径和,时时计算答案. long long!!! #include<c ...
随机推荐
- 20151024_002_C#基础知识(ArrayList,Hashtable,List,Dictionary)
1:ArrayList 和 Hashtable(哈希表) 1.1:ArrayList ArrayList list = new ArrayList(); list.Add(); list.AddRan ...
- Html5_sessionStrong和localStorage的灵活使用
谈谈这两个属性sessionStrong和localStorage是Html5新增点属性,用来记录一些数据在浏览器. 两者的区别sessionStrong存储的数据是暂时的,浏览器关掉后,存储下来的数 ...
- mave的依赖范围
compile(编译范围) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范 围.编译范围依赖在所有的classpath中可用,同时它们也会被打包. provided(已提供 ...
- 为什么IO多路复用需要采用非阻塞式IO
近段时间开始学习<Unix网络编程>,代码实现了一个简单的IO多路复用+阻塞式的服务端,在学习了非阻塞式IO后,有一个疑问,即: 假如调用了select,并且关注了几个描述字,当关注的描述 ...
- linux内核网络接收数据流程图【转】
转自:http://blog.chinaunix.net/uid-23069658-id-3141409.html 4.3 数据接收流程图 各层主要函数以及位置功能说明: 1)s ...
- binlog2sql 回滚误操作
参考过在资料: https://github.com/wuyongshenghub/mysqlbinlog2sql https://www.cnblogs.com/xuanzhi201111/p/66 ...
- 根据日期查询年龄js
function ages(str) { var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if(r==null)return f ...
- mysql 安装和配置
mysql 安装: 在命令行输入 sudo apt-get install mysql-server 安装过程中会跳出来一个窗口,输入数据库root用户的密码(必须输入密码) 安装完成后 通过 my ...
- 我的新博客地址http://xxxbw.github.io/
最近在学github,在github搭了个博客,以后也会使用另外一个博客.有兴趣的小伙伴可以看看~ 地址:http://xxxbw.github.io/
- python中烦人的锟斤拷(\xef\xbf\xbd)
首先要知道\xef\xbf\xbd是啥东西 >>> u'\uFFFD'.encode('utf-8') '\xef\xbf\xbd' 由此我们可以知道\xef\xbf\xbd是utf ...