LA 4015 树形背包
题目链接: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 树形背包的更多相关文章
- poj2486Apple Tree[树形背包!!!]
Apple Tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9989 Accepted: 3324 Descri ...
- cdoj 1136 邱老师玩游戏 树形背包
邱老师玩游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1136 Desc ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- poj 1155 TELE (树形背包dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: poj-1155 题意 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构, ...
- bzoj 4813: [Cqoi2017]小Q的棋盘 [树形背包dp]
4813: [Cqoi2017]小Q的棋盘 题意: 某poj弱化版?树形背包 据说还可以贪心... #include <iostream> #include <cstdio> ...
- [HAOI2015]树上染色(树形背包)
有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之间的距离加 ...
- Luogu 1273 有线电视网 - 树形背包
Description 树形背包, 遍历到一个节点, 枚举它的每个子节点要选择多少个用户进行转移. Code #include<cstring> #include<cstdio> ...
- BZOJ2427: [HAOI2010]软件安装 tarjan+树形背包
分析: 一开始我以为是裸的树形背包...之后被告知这东西...可能有环...什么!有环! 有环就搞掉就就可以了...tarjan缩点...建图记得建立从i到d[i]之后跑tarjan,因为这样才能判断 ...
- [Jsoi2016]最佳团体 BZOJ4753 01分数规划+树形背包/dfs序
分析: 化简一下我们可以发现,suma*ans=sumb,那么我们考虑二分ans,之后做树形背包上做剪枝. 时间复杂度证明,By GXZlegend O(nklogans) 附上代码: #includ ...
随机推荐
- 采用MQTT协议实现android消息推送(4)选fusesource-mqtt-client为客户端
1.简介 一个java写的mqtt客户端.项目地址: https://github.com/fusesource/mqtt-client 2.引入fusesource-mqtt-client库 Fil ...
- 转 Nmon 监控生成数据文件字段的介绍
##发现nomon 一个好用的功能 数据透视图 PIVOTCHART:这些参数被用来构建数据透视图.所需的参数:Sheetname,PageField,rowfield,columnfield,Dat ...
- 4.整体架构和Smart Scan
寻道时间: 外圈,比内圈要多, 即外圈是比较快的. 第一次创建grid disk 时,是创建外圈,用于存放数据的,内圈存储归档这些数据 CellCLI> CREATE GRIDDISK ALL ...
- 网络编程api bind函数细节 select 细节
struct sockaddr_in bindaddr; bindaddr.sin_family = AF_INET; bindaddr.sin_addr.s_addr = htonl(INADDR_ ...
- (转)在 Windows 上调优 DB2 数据库的八个简单步骤
原文:https://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1209tunedb2/index.html 概述 为了更好地 ...
- hadoop 天气案例
对下面一组气温数据进行处理,得到每个月份最高的两个气温值 2018-12-12 14:30 25c2018-12-12 15:30 26c2017-12-12 12:30 36c2019-01-01 ...
- OLEDB存取BLOB型数据
现代数据库系统除了支持一些标准的通用数据类型以外,大多数还支持一种称之为BLOB型的数据. BLOB全称为big large object bytes, 大二进制对象类型,这种类型的数据通常用于存储文 ...
- sql: 生日赠品中的相关算法
---2013年10月9日生日,就以2012年9月1日至2013年8月31日計算 (因為係生日月份前兩個月之最後一天為結算日) DECLARE @birthday datetime,@now date ...
- cf547D. Mike and Fish(欧拉回路)
题意 题目链接 Sol 说实话这题我到现在都不知道咋A的. 考试的时候是对任意相邻点之间连边,然后一分没有 然后改成每两个之间连一条边就A了.. 按说是可以过掉任意坐标上的点都是偶数的数据啊.. #i ...
- git 创建远程版本库(亲测有效)
一.github远程版本库 1.创建SSH Key(windows) ssh-keygen -t rsa -C "youremail@example.com" 2.连接版本 ...