博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[USACO10MAR]伟大的奶牛聚集Great Cow Gat…【树形dp】By cellur925
阅读量:4577 次
发布时间:2019-06-08

本文共 878 字,大约阅读时间需要 2 分钟。

首先这道题是在树上进行的,然后求最小的不方便程度,比较符合dp的性质,那么我们就可以搞一搞树形dp。

设计状态:f[i]表示以i作为聚集地的最小不方便程度。那么我们还需要各点间的距离,但是由于本题数据加强到1e5,开二维数组显然是不现实的,我们可以换一种思路,求d[i]表示其他所有奶牛到 i点的距离和,这样就成功转化过来惹==。

d[u]+=d[v]+size[v]*edge[i].val

然后再预处理size[i]数组表示以i为根的子树上奶牛的数量。这些都是一遍dfs就能搞定的,然后本题其实开始是无根树,这里默认1为根,看做有根树惹==。

 

转移:我们易知本题的转移是从当前状态转移到未来状态的。冷静分析可得

f[v]=f[u]-size[v]*edge[i].val+(cnt-size[v])*edge[i].val

然后本题中出现几次的转化思想,如上述方程中的cnt在中也有体现。

Code

1 #include
2 #include
3 4 using namespace std; 5 typedef long long ll; 6 7 int n,tot; 8 ll ans=1e40,cnt,size[100090],d[100090],f[100090]; 9 ll val[100090];10 ll head[100090];11 struct node{12 ll to,next,val;13 }edge[100090*2];14 15 ll lmin(ll a,ll b)16 {17 if(a
View Code

细节:本题开long long是毋庸置疑的,我开始把ans初值赋成了0x3f3f3f3f,在一般情况下本来够用,但是因为本题数据较大,所以在这种环境下就显得偏小了,可开到1e40.

 

转载于:https://www.cnblogs.com/nopartyfoucaodong/p/9645641.html

你可能感兴趣的文章
XMPP协议的原理介绍
查看>>
设计模式(3)-- 原型模式 (clone分析)
查看>>
删除U8中单据已经审核完成但工作流未完成的任务
查看>>
@mentions for Users with ActionText; 使用Tribute.js库
查看>>
方法返回前面有if - else if - else ,最终返回值是?
查看>>
编译环境
查看>>
获取用户的邮箱地址的几个方法
查看>>
个人作业(二)
查看>>
黄金点游戏
查看>>
ubuntu安装,配置ftp服务器
查看>>
ajax跨域的三种方法
查看>>
25个Linux相关的网站
查看>>
Weex-进阶笔记一
查看>>
mouseover和mouseenter的区别
查看>>
bzoj 3312 No Change
查看>>
需求分析(团队作业3)
查看>>
希腊字母
查看>>
多线程基础知识(一)
查看>>
FU-A 分包
查看>>
android AsyncTask
查看>>