BZOJ4711: 小奇挖矿
来源:互联网 发布:c语言 gbk转unicode 编辑:程序博客网 时间:2024/05/18 16:16
Description
【题目背景】
小奇在喵星系使用了无限非概率驱动的采矿机,以至于在所有星球上都采出了一些矿石,现在它准备建一些矿石仓
库并把矿石运到各个仓库里。
【问题描述】
喵星系有n个星球,标号为1到n,星球以及星球间的航线形成一棵树。所有星球间的双向航线的长度都为1。小奇要
在若干个星球建矿石仓库,设立每个仓库的费用为K。对于未设立矿石仓库的星球,设其到一个仓库的距离为i,则
将矿石运回的费用为Di。请你帮它决策最小化费用。
Input
第一行2个整数n,K。
第二行n-1个整数,D1,D2,…Dn-1,保证Di<=Di+1。
接下来n-1行,每行2个整数x,y,表示星球x和星球y存在双向航线。
n<=200,0<=K,Di<=100000
Output
输出一行一个整数,表示最小费用。
Sample Input
8 10
2 5 9 11 15 19 20
1 4
1 3
1 7
4 6
2 8
2 3
3 5
2 5 9 11 15 19 20
1 4
1 3
1 7
4 6
2 8
2 3
3 5
Sample Output
38
【样例解释】
在1,2号星球建立仓库。
【样例解释】
在1,2号星球建立仓库。
HINT
Source
bzoj咋有这么水的树形dp
预处理距离
dp[i][j]表示i的子树已经计算,i以j为仓库的最小花费(不考虑仓库花费)
考虑i的儿子x dp[i][j]=min(dp[x][k]+K,dp[x][j]) 然后就没了
显然儿子和父亲不会转移到上面不同的仓库 否则他们选择一个答案肯定更小 这样就不会考虑一些奇怪的情况了
这里的g++编译器有点惨,测不了样例,反正我在本机上没过样例 结果AC了 不要问我为什么
#include<bits/stdc++.h>using namespace std;const int maxn=220;int n,K;int v[maxn],head[maxn],cnt;int d[maxn][maxn],dp[maxn][maxn];struct edge{int to,nxt;}e[maxn<<1];inline void addedge(int x,int y){e[++cnt].to=y;e[cnt].nxt=head[x];head[x]=cnt;}void getdis(int x,int fa,int fr){for(int i=head[x];i;i=e[i].nxt)if(e[i].to!=fa)d[fr][e[i].to]=d[fr][x]+1,getdis(e[i].to,x,fr);}void dfs(int x,int fa){for(int i=head[x];i;i=e[i].nxt)if(e[i].to!=fa)dfs(e[i].to,x);for(int i=1;i<=n;i++){dp[x][i]=v[d[x][i]];for(int j=head[x];j;j=e[j].nxt){int y=e[j].to,tmp=dp[y][i];for(int k=1;k<=n;k++)tmp=min(tmp,dp[y][k]+K);dp[x][i]+=tmp;}}}int main(){scanf("%d%d",&n,&K);for(int i=1;i<n;i++) scanf("%d",&v[i]);for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);addedge(x,y);addedge(y,x);}for(int i=1;i<=n;i++) getdis(i,0,i);dfs(1,0);int cur=1e9;for(int i=1;i<=n;i++) cur=min(cur,dp[1][i]);return printf("%d\n",cur+K),0;}
0 1
- BZOJ4711 小奇挖矿
- BZOJ4711: 小奇挖矿
- 小奇挖矿 Explo
- 【NOIP模拟赛】小奇挖矿
- DP 小奇挖矿2
- 小奇挖矿 解题报告
- [Codevs5339][hzwerNOIP模拟赛]小奇挖矿
- [Codevs5339][HzwerNoip模拟赛]小奇挖矿
- List
- 使用codeblocks编程运行时终端不能复制粘贴
- 【12月7日】类的初始化(二):构造器初始化
- MySQL5.7 binlog_group_commit_sync_delay对并发复制性能的影响
- Codeforces Round #383 (Div. 2) A(快速幂取膜)
- BZOJ4711: 小奇挖矿
- echarts的legend图例的显示与隐藏(legend图例进入页面显示的个数)
- 快速增加微信好友技巧
- PullToRefresh下拉刷新 加载更多 详解 +示例
- 2016-12-7 新版筛选法求素数
- CSS3 的 transition 和 animation
- RxJava—操作符(过滤、合并、转换)
- 关于同网段内主机之间通信细节
- Linux常用快捷键