hdu 4276 树形m时间1进n出
http://acm.hdu.edu.cn/showproblem.php?pid=4276
一般题目是求回到原地,而这道题规定从1进n出。所以1-n这条路是必走,其他走不走无所谓。
这样很自然通过dfs先处理1-n这条路,统计这条路的花费时间cost,同时将这条上的边权设为0。
接下来就是求m-cost时间遍历能产生的最大价值,也就是最普通的问题。在这里因为1-n这条路边权已经为0,所以一定会走,只要m-cost时间能回到1点就行。
所以我觉得将1-n边权置为0是这道题的点睛之笔。
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <cctype>
#include <vector>
#include <iterator>
#include <set>
#include <map>
#include <sstream>
using namespace std; #define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define pb push_back
#define debug printf("!\n")
#define MAXN 1000+5
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define pqueue priority_queue
#define INF 0x3f3f3f3f int n,m; struct node{int y,val,next;}tree[MAXN<<]; int head[MAXN],vis[MAXN],ptr=,dp[MAXN][MAXN],a[MAXN],vis2[MAXN]; void init()
{
mem(head,-);
mem(vis,);
mem(vis2,);
mem(dp,);
ptr=;
}
void add(int x,int y,int val)
{
tree[ptr].y = y;
tree[ptr].val = val;
tree[ptr].next = head[x];
head[x] = ptr++;
} int cost; void dfs(int rt)
{
vis[rt]=;
for(int i = ;i<=m;i++) dp[rt][i] = a[rt];
for(int i = head[rt];i!=-;i=tree[i].next)
{
int y = tree[i].y;
if(vis[y]) continue;
dfs(y);
for(int j=m;j>=;j--)
{
for(int k=;k<=j;k++)
{
if(j-k-*tree[i].val>=)
dp[rt][j] = max(dp[rt][j],dp[rt][j-k-*tree[i].val]+dp[y][k]);
}
}
}
} bool dfs2(int rt)
{
vis2[rt] = ;
for(int i = head[rt];i!=-;i=tree[i].next)
{
int y = tree[i].y;
if(vis2[y]) continue;
if(y==n)
{
cost+=tree[i].val;
return true;
}
if(dfs2(y))
{
cost+=tree[i].val;
tree[i].val = ;
return true;
}
}
} int main()
{
int i,j,k,t;
while(~sf("%d%d",&n,&m))
{
init();
cost = ;
for(i=;i<n;i++)
{
int x,y,z;
sf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
for(i=;i<=n;i++) sf("%d",&a[i]);
dfs2();
if(cost>m)
{
pf("Human beings die in pursuit of wealth, and birds die in pursuit of food!\n");
continue;
}
m-=cost;
dfs();
pf("%d\n",dp[][m]);
}
}
hdu 4276 树形m时间1进n出的更多相关文章
- hdu 4276 树形dp
题意:给你n个点,n-1条边构成树,每条边有边权(表示走每条边的时间),每个点有点权,问在时间T从点1走到点n,能够得到最多的点权有多少. 题目链接:点我 由于是树,最优的结果一定经过最短路,其他边要 ...
- 【HDU 4276】The Ghost Blows Light(树形DP,依赖背包)
The Ghost Blows Light Problem Description My name is Hu Bayi, robing an ancient tomb in Tibet. The t ...
- HDU 4276 The Ghost Blows Light
K - The Ghost Blows Light Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- HDU 1011 树形背包(DP) Starship Troopers
题目链接: HDU 1011 树形背包(DP) Starship Troopers 题意: 地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...
- hdu 4123 树形DP+RMQ
http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...
- win10锁屏或睡眠一段时间后弹不出登录框
win10锁屏或睡眠一段时间后弹不出登录框 文:铁乐与猫 通常发生在win10更新到10周年版后发生,也就是会卡在登录状态,但不见输入登录框. 我出现这种情况的时候不是很严重,一般等久些也能出现,但问 ...
- android 开发 实现一个app的引导页面,使用ViewPager组件(此引导的最后一页的Button会直接写在最后一页布局里,跟随布局滑进滑出)
基本ViewPager组件使用方式与我之前写的https://blog.csdn.net/qq_37217804/article/details/80332634 这篇博客一致. 下面我们将重点详细解 ...
- ref与out区别(ref有进有出,而out只出不进)
ref与out区别(ref有进有出,而out只出不进) C#基础:ref和out的区别 ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值 ...
- HDU 4276 The Ghost Blows Light(树形)
题意:给出一棵n个节点的树,起点1,终点n,相连的两个节点之间有距离,每个节点有个价值,给出一个时间T.问从1到达n在给定时间T内取得的最大价值? 思路:先从1走到n,如果总的时间不够走完,直接退出, ...
随机推荐
- 设计一个MQ的考虑点
转自: https://segmentfault.com/a/1190000004461970 序 这里总结下MQ的研究点,以及如果要自己设计一个MQ应该考虑的因素. 考虑点 1.远程通信功能 (1) ...
- B君的第九题
B君的第九题 对于一个排列\(a_1, a_2,\dots,a_n\),如果对于一个i满足\(a_{i-1}<a_i>a_i+1\)则称i是一个极大值.我们认为\(a_0=a_{n+1}= ...
- php excel开发01
启用cache
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- centos上安装docker
一 docker安装: 1 首先需要检查linux内核的版本,docker要求linux内核是在3.10之上的, uname -r 2 更新yum源,注意这步应该是管理员权限,如果当前不是管理员,切换 ...
- html表单笔记
1.下面是 <form> 属性的列表: accept-charset 规定在被提交表单中使用的字符集(默认:页面字符集). action 规定向何处提交表单的地址(URL)(提交页面). ...
- DesiredCapabilities内容详解--Appium服务关键字
上次了解了一些DesiredCapabilities的用法,有些还是不太清楚,去appium官网找了找官方文档,觉得写的很全: ## Appium 服务关键字 <expand_table> ...
- mac os x忘记了root密码怎么办,忘记登录密码(普通帐号密码)也是一样的
有时候我们给mac设置了root密码,一段时间不用,却忘记了密码,怎么办?下面的办法帮你解决: 步骤1:先关闭你的mac系统 步骤2:开机,按住Command和s两个按键不松手直到出现下面的界面: 步 ...
- HDU - 1878 欧拉回路 (连通图+度的判断)
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是节点数 ...
- N - 嘤嘤嘤 (并查集+枚举)
Our lovely KK has a difficult Social problem. A big earthquake happened in his area. N(2≤N≤2000)N(2≤ ...