题目链接:https://vjudge.net/contest/164840#problem/D

题意: 给一棵树,每条边上有一些权值,求 长度不超过 x ,最多能走多少个点;

分析:

考虑每一个节点,他可以一直走下去,也可以走回来而走到他的兄弟节点;

状态定义:

d[x][j][0/1] 从 i 出发,走 j 个节点的最短距离;

1、回来,这就是一个背包,更新当前节点;

2、不回来,则是要考虑从哪个部分不回来;

 #include <bits/stdc++.h>

 using namespace std;

 int n;
const int maxn = ;
const int inf = 0x3f3f3f3f;
vector <int> g[maxn];
int cnt[maxn];
int son[maxn]; int d[maxn][maxn][]; void dfs(int x) { for(int i=; i<=n; i++)
d[x][i][] = d[x][i][] = inf;
d[x][][] = d[x][][] = ; son[x] = ;
for(int i=; i<g[x].size(); i+=) {
int y = g[x][i];
int len = g[x][i+];
dfs(y); for(int j=son[x]; j>; j--) { ///这一重 相当于前面几个背包
for(int k=; k<=son[y]; k++) { ///这一重 相当于当前这个背包中拿物品
d[x][j+k][] = min(d[x][j+k][],d[x][j][]+d[y][k][]+len*);
d[x][j+k][] = min(d[x][j+k][],min(d[x][j][]+d[y][k][]+len*,d[x][j][]+d[y][k][]+len));
}
} son[x] +=son[y];
}
} int main() {
int cas = ;
while(scanf("%d",&n),n) {
for(int i=; i<=n; i++)
g[i].clear(); memset(cnt,,sizeof(cnt));
for(int i=; i<n-; i++) {
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
cnt[u]++;
g[v].push_back(u);
g[v].push_back(w);
} int root = ;
for(int i=; i<n; i++)
if(!cnt[i])
root = i; dfs(root);
int q,x;
scanf("%d",&q);
printf("Case %d:\n",cas++);
while (q--) {
scanf("%d",&x);
int ans = ;
for (int i = ; i <= n; i++)
if (d[root][i][] <= x)
ans = i;
printf("%d\n",ans);
} }
return ;
}

膜拜猫奴大牛;

LA 4015 树形背包的更多相关文章

  1. poj2486Apple Tree[树形背包!!!]

    Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9989   Accepted: 3324 Descri ...

  2. cdoj 1136 邱老师玩游戏 树形背包

    邱老师玩游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1136 Desc ...

  3. HDU 1011 树形背包(DP) Starship Troopers

    题目链接:  HDU 1011 树形背包(DP) Starship Troopers 题意:  地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...

  4. poj 1155 TELE (树形背包dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: poj-1155 题意 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构, ...

  5. bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]

    4813: [Cqoi2017]小Q的棋盘 题意: 某poj弱化版?树形背包 据说还可以贪心... #include <iostream> #include <cstdio> ...

  6. [HAOI2015]树上染色(树形背包)

    有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之间的距离加 ...

  7. Luogu 1273 有线电视网 - 树形背包

    Description 树形背包, 遍历到一个节点, 枚举它的每个子节点要选择多少个用户进行转移. Code #include<cstring> #include<cstdio> ...

  8. BZOJ2427: [HAOI2010]软件安装 tarjan+树形背包

    分析: 一开始我以为是裸的树形背包...之后被告知这东西...可能有环...什么!有环! 有环就搞掉就就可以了...tarjan缩点...建图记得建立从i到d[i]之后跑tarjan,因为这样才能判断 ...

  9. [Jsoi2016]最佳团体 BZOJ4753 01分数规划+树形背包/dfs序

    分析: 化简一下我们可以发现,suma*ans=sumb,那么我们考虑二分ans,之后做树形背包上做剪枝. 时间复杂度证明,By GXZlegend O(nklogans) 附上代码: #includ ...

随机推荐

  1. GreenPlum 大数据平台--运维(一)

    .最后分析或真空或创建表或等... Select * from pg_stat_operations where schemaname='SCHEMA NAME ' and actionname in ...

  2. D. Match & Catch 后缀自动机 || 广义后缀自动机

    http://codeforces.com/contest/427/problem/D 题目是找出两个串的最短公共子串,并且在两个串中出现的次数只能是1次. 正解好像是dp啥的,但是用sam可以方便很 ...

  3. URL篇之相对URL

    URL有两种方式:绝对的和相对的. 绝对URL中包含有访问资源所需的全部信息,是访问网络资源必须的. 相对URL是不完整的,要从相对URL中获取访问资源所需的全部信息,就必须相对于另一个被称为其基础( ...

  4. Ubuntu 12.04 搭建 SAMBA-SWAT(Samba Web 管理工具)

    参考了:http://linux.chinaunix.net/techdoc/net/2007/03/14/952274.shtml,对其进行了部分修改完善. 依次执行 1.sudo apt-get ...

  5. (转)在 Windows 上调优 DB2 数据库的八个简单步骤

    原文:https://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1209tunedb2/index.html 概述 为了更好地 ...

  6. python从字符串内取两个符号之间的内容

    #取字符串中两个符号之间的东东 def txt_wrap_by(self,start_str, end, html): start = html.find(start_str) if start &g ...

  7. TOJ 1840 Jack Straws

    Description In the game of Jack Straws, a number of plastic or wooden "straws" are dumped ...

  8. [LeetCode]20. Valid Parentheses有效的括号

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  9. 支持触屏的zepto轮播图插件

    占个座,有时间再写,呵呵 关于zepto.js,官方标准版是不支持touch的.可以去github下载压缩包,里面有所有支持的模块.我用的zepto.js,是经过打包的,包括polyfill zept ...

  10. echarts解决一些大屏图形配置方案汇总

    本文主要记录使用echarts解决各种大屏图形配置方案. 1.说在前面 去年经常使用echarts解决一些可视化大屏项目,一直想记录下使用经验,便于日后快速实现.正好最近在整理文档,顺道一起记录在博客 ...