题目链接: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. Flask中的的SQLAlchemy

    好久没有更新Blog了 今天来聊一聊 Python 的 ORM 框架 SQLAlchemy 有的孩子已经听说过这个框架的大名了,也听说了 SQLAlchemy 没有 Django 的 Models 好 ...

  2. 关于kernel的疑问,不解

    (1)最近看的关于linux的部分主要是底层部分,linux对设备是如何访问,结果还是通过地址.机制差不错知道,下一步是阅读相关代码进一步理清内核,同时了解驱动的开发. 主要的疑问是对于高端内存映射, ...

  3. nginx安装及优化

    1.pcre及nginx安装包下载 wget http://www.pcre.org/   pcre用yum安装即可 http://nginx.org/en/download.html 2.安装 -安 ...

  4. 如何恢复sqlserver误删除的数据(摘)

    一.借助第三方工具 1.sqlserver2005: Log Explorer http://www.cnblogs.com/whitney/archive/2008/08/22/1273879.ht ...

  5. python的用户输入和while循环

    1.函数input()工作原理 函数input()让程序暂停运行,等待用户输入一些文本.获取用户输入后,Python将其存储在一个变量中,以方便你使用. (1)获取数值可以用 int()函数 (2)求 ...

  6. 多线程篇四:ThreadLocal实现线程范围内变量共享

    1.static实现线程范围内变量共享 package com.test.shareData; import java.util.Random; /** * 多线程范围内的数据共享 * @author ...

  7. IO流之流的操作规律

    流的操作规律 IO流中对象很多,解决问题(处理设备上的数据时)到底该用哪个对象呢? 把IO流进行了规律的总结(四个明确): l  明确一:要操作的数据是数据源还是数据目的. 源:InputStream ...

  8. jQuery二——属性操作、文档操作、位置属性

    一.jquery的属性操作 jquery对象有它自己的属性和方法. 其中jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作. 1.html属性操作 是对htm ...

  9. SQLAlchemy的使用---外键ForeignKey数据增删改查

    # 添加数据 from sqlalchemy.orm import sessionmaker from create_table_ForeignKey import engine, Student, ...

  10. 【数据库】2.0 MySQL入门学习(二)——如何获得MySQL以及MySQL安装

    1.0 如何获得MySQL: www.oracle.com https://dev.mysql.com/downloads/ 2.0 例如进入Oracle官网,找到MySQL: 进入页面后,切换到“资 ...