题目链接:https://vjudge.net/problem/HDU-4003

题意:给一棵边权树,在树根s有m个人,要通过m个人遍历到所有点,一个人经过一条边花费为边的权值,求最小花费(可以走已经走过的边)。

思路:

  状态比较好想,用dp[u][j]表示在u结点的子树中有j个人的最小花费。但转移方程有点难想。

  重要的是怎么处理dp[u][0],对dp[v][0],即在v结点的子树中有0个人的最小花费,那么只能通过v的父结点u过来机器人,假设来x个人,那这x个人在遍历v子树所有点之后还要回到u才行,那么花费为2*sum[v]+2k*w,sum[v]是v子树中所有边的权值和,w是u->v的边权,所以k=1时花费最小,花费为2*sum[v]+2*w。故dp[u][0]=sum(2*sum[v],2*w),外面的sum表示求和。

  j>0时,可以简单地推出:dp[u][j]=min(dp[u][j] , dp[u][j-k]+dp[v][k]+k*w),v是u的子结点,k表示子结点v有k个人,w是u->v的边权。

AC代码:

#include<cstdio>
#include<algorithm>
using namespace std; const int maxn=1e4+;
const int inf=0x3f3f3f3f;
int n,s,m,cnt,head[maxn],sum[maxn],dp[maxn][]; struct node{
int v,w,nex;
}edge[maxn<<]; void adde(int u,int v,int w){
edge[++cnt].v=v;
edge[cnt].w=w;
edge[cnt].nex=head[u];
head[u]=cnt;
} void dfs(int u,int fa){
for(int i=head[u];i;i=edge[i].nex){
int v=edge[i].v;
if(v==fa) continue;
dfs(v,u);
for(int j=m;j>=;--j)
for(int k=;k<=j;++k)
if(k) dp[u][j]=min(dp[u][j],dp[u][j-k]+dp[v][k]+k*edge[i].w);
else dp[u][j]+=dp[v][]+*edge[i].w;
}
} int main(){
while(~scanf("%d%d%d",&n,&s,&m)){
cnt=;
for(int i=;i<=n;++i){
head[i]=;
for(int j=;j<=m;++j)
dp[i][j]=;
}
for(int i=;i<n;++i){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
adde(u,v,w);
adde(v,u,w);
}
dfs(s,);
printf("%d\n",dp[s][m]);
}
return ;
}

最新文章

  1. 测试键盘的控制字符对应的ASCII码值
  2. struts2.0整合json
  3. codeforces 725D . Contest Balloons(贪心+优先队列)
  4. 为什么.NET感觉上比Java差一点
  5. word 转 PDF时报错
  6. 中文系统下,UTF-8编码文本文件读取导致的错误
  7. JPA 批量新增
  8. 一个完整openlayer的例子,包括marker,popup等
  9. MyBatis返回主键,MyBatis Insert操作返回主键
  10. 前端input选中状态时的蓝框
  11. java实体属性对应mysql和SQL Server 和Oracle 数据类型对应
  12. About Cheating and Plagiarism
  13. Java基本语法-----java进制的转换
  14. mysql之limit使用
  15. [十一]基础数据类型之Character
  16. 多线程(2)Thread
  17. flume 学习总结
  18. day12-python的类
  19. java网络编程Socket通信详解
  20. 十 suprocess模块

热门文章

  1. 003_STM32程序移植之_W25Q64
  2. 爬虫----异步---高性能爬虫----aiohttp 和asycio 的使用
  3. 032_备份 MySQL 的 shell 脚本(mysqldump 版本)
  4. CF788B Weird journey 欧拉路径+计数
  5. 自己实现dup2
  6. ECMAScript 5.0 基础语法(下)“稍微重点一点点”
  7. Spring Cloud Config(二):基于Git搭建配置中心
  8. 6.3 MRUnit写Mapper和Reduce的单元测试
  9. Django中常用的基本命令
  10. Mac 卸载Python3.6