1. /*
    依赖背包的通常做法就是对于每个结点,先处理处其所有子节点的dp,然后对于当前结点进行分组背包dp即可
  2. 还是依赖背包问题,dp[i][j]表示结点i的子树用了j个机器人的搜索代价
  3. 边界条件,如果某个结点的子树用了0个机器人,那么搜索这个棵子树的代价是边权和*2
  4. 将每个结点子树中的机器人看做物品体积,搜索代价看做价值,求最小价值
  5. */
  6. #include<bits/stdc++.h>
  7. using namespace std;
  8. struct Edge{int to,nxt,w;}edge[<<];
  9. int head[],tot,dp[][],n,s,k;
  10. void init(){memset(head,-,sizeof head);tot=;}
  11. void addedge(int u,int v,int w){
  12. edge[tot].to=v;edge[tot].nxt=head[u];edge[tot].w=w;head[u]=tot++;
  13. }
  14.  
  15. void dfs(int u,int pre){
  16. for(int i=head[u];i!=-;i=edge[i].nxt){
  17. int v=edge[i].to;
  18. if(v!=pre)dfs(v,u);
  19. }
  20.  
  21. for(int i=head[u];i!=-;i=edge[i].nxt){//分组背包
  22. int v=edge[i].to;
  23. if(v==pre)continue;
  24. for(int j=;j>=;j--){
  25. dp[u][j]=dp[u][j]+dp[v][]+*edge[i].w;//赋予边界值
  26. for(int l=;l<=j;l++)
  27. dp[u][j]=min(dp[u][j],dp[u][j-l]+dp[v][l]+l*edge[i].w);
  28. }
  29. }
  30. }
  31. int main(){
  32. while(scanf("%d%d%d",&n,&s,&k)==){
  33. init();
  34. int u,v,w;
  35. for(int i=;i<n;i++){
  36. scanf("%d%d%d",&u,&v,&w);
  37. addedge(u,v,w);
  38. addedge(v,u,w);
  39. }
  40.  
  41. memset(dp,,sizeof dp);
  42. dfs(s,-);
  43. printf("%d\n",dp[s][k]);
  44. }
  45. return ;
  46. }

hdu4003的更多相关文章

  1. POJ1849Two[DP|树的直径](扩展HDU4003待办)

    Two Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1390   Accepted: 701 Description Th ...

  2. HDU-4003 Find Metal Mineral (树形DP+分组背包)

    题目大意:用m个机器人去遍历有n个节点的有根树,边权代表一个机器人通过这条边的代价,求最小代价. 题目分析:定义状态dp(root,k)表示最终遍历完成后以root为根节点的子树中有k个机器人时产生的 ...

  3. HDU4003 Find Metal Mineral 树形DP

    Find Metal Mineral Problem Description Humans have discovered a kind of new metal mineral on Mars wh ...

  4. HDU4003 Find Metal Mineral

    看别人思路的 树形分组背包. 题意:给出结点数n,起点s,机器人数k,然后n-1行给出相互连接的两个点,还有这条路线的价值,要求最小花费 思路:这是我从别人博客里找到的解释,因为很详细就引用了 dp[ ...

  5. hdu4003(树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 题意:给定一棵n个节点的树,遍历每条数边都需要费用cost,现在给定k个机器人,要求用这个k个机 ...

  6. hdu4003详解(树形dp+多组背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 Find Metal Mineral Time Limit: 2000/1000 MS (Jav ...

  7. HDU4003 树形DP

    题意 :给一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值.        有k个机器人从S点出发, 问让机器人遍历所有边,最少花费值多少? 这题最难的地方应该就是如何定义状态了 定义dp ...

  8. hdu4003/蓝桥杯 金属采集

    思路: 树形dp + 分组背包dp. 参考https://www.cnblogs.com/kuangbin/archive/2012/08/29/2661928.html 实现: #include & ...

  9. 【HDU4003】Find Metal Mineral

    题目大意:给定一棵 N 个节点的有根树,边有边权,在根结点处有 K 个人,这些人会遍历树上的所有边,求如何遍历才能使得所有人走过路径的边权和最小. 题解: 引理:对于一棵子树来说,若存在 M>0 ...

随机推荐

  1. undefined symbol

    参考链接:  https://blog.csdn.net/shatterheart/article/details/52440149

  2. Spring基础2

    一.Spring属性注入 1)构造方法属性注入 2)set方法属性注入:通过在bean对象所属类中提供相应字段的set方法,并在配置文件中配置<property.....> <bea ...

  3. Python 爬虫一 简介

    什么是爬虫? 爬虫可以做什么? 爬虫的本质 爬虫的基本流程 什么是request&response 爬取到数据该怎么办 什么是爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间 ...

  4. Nginx系列1:ubuntu16.04编译出适合自己的nginx服务器

    1.下载nginx nginx官网:nginx.org tar.gz文件 解压缩命令: wget https://nginx.org/download/nginx-1.14.2.tar.gz #下载n ...

  5. NOIP2018 20天训练

    Day 0 2018.10.20 其实写的时候已经是Day 1了--(凌晨两点) 终于停课了,爽啊 get树状数组+线段树(延迟标记) 洛谷:提高组所有nlogn模板+每日一道搜索题(基本的图的遍历题 ...

  6. SpringSecurity如何退出登录

    ⒈如何退出登录? SpringSecurity默认为我们提供了退出操作,我们只需要访问特定的url就可以退出登录了 <!DOCTYPE html> <html lang=" ...

  7. Go语言中的结构体 (struct)

    Golang官方称Go语言的语法相对Java语言而言要简洁很多,但是简洁背后也灵活了很多,所以很多看似很简单的代码上的细节稍不注意就会产生坑.本文主要对struct结构体的相关的语法进行总结和说明. ...

  8. requests库入门08-delete请求

    还是使用GitHub的接口,之前我们新增了邮箱,这次使用delete请求来删除邮箱,接口文档地址 import requests test_url = 'https://api.github.com' ...

  9. Python3学习笔记04-运算符

    算术运算符 +     加两个对象相加 -      减得到负数或是一个数减去另一个数 *     乘两个数相乘或是返回一个被重复若干次的字符串 /     除x 除以 y %    取模返回除法的余 ...

  10. Linux VPS基础命令 - cp复制文件命令

    cp命令在Linux VPS操作和应用过程中还是比较常用的,我们可以用来复制文件或者文件夹,重命名一个新的文件以及复制到其他路径中用于文件的转移. 举例用法: 1.复制root目录下的itbulu.c ...