UVA1484 Alice and Bob's Trip (hdu3660)
一、前言
最开始卡这题是某大佬给出的树DP专题中的一个,据说类似于对抗搜索(这是啥?)的一题
但是在经历了若干艰难困苦之后发现这题在HDU上A不了——(先卡vector的时间,后卡输入的时间,上了输入挂还是玄学超时)。于是遵从百度到的大佬指点,上UVA上面交了一发,发现500毫秒过得。。。感觉心好累。。。。
二、题意
A,B两人计划在一棵树上旅行,A想尽量短,B想尽量长,但是有个区间规定了这个时间长短:L和R。考虑到是B开始出发,于是求能够在L-R区间内得到的最远的距离。如果得不到就输出“Oh, my god!”
思路大概是,设DP【i】为第i号节点的最优解——(不论是对A还是B来说的最优解)。能这么干是因为,树的形状、起始节点一旦给定就会使得每个节点由射来选择成为一个固定选项。因而可以直接这么设定。于是,剩下的比较简单——A在区间内选最小,B在区间内选最大。
#include<stdio.h>
#include<string.h>
using namespace std;
#define ll int
#define pp pair<int,ll>
#define vecp vector<pp> const long long MAXN=; //vecp G[MAXN]; inline void read_int(int &ret)
{
ret=;
char c=getchar();
while(c>''||c<'')c=getchar();
while(c<=''&&c>='')ret=ret*+c-'',c=getchar();
} class node
{
public:
int next;
int to;
ll cost;
void make(int next,int a,ll b)
{
this->next=next;
to=a;
cost=b;
} };node G[MAXN*];
int number[MAXN];
int size;int cnt[MAXN];
void add(int a,int b,ll c)
{
// number[a]=size;
cnt[a]++;
G[size].make(number[a],b,c);
number[a]=size++;
} ll dp[MAXN];
ll n,l,r; inline bool check(ll tmp)
{
return tmp>=l&&tmp<=r;
} void checkMin(ll &a,ll b)
{
a= a==-||a>b ? b:a;
}
void checkMax(ll &a,ll b)
{
a= a==-||a<b ? b:a;
} void dfs(int now,int last,ll maxx,bool isBob)
{
// int len=G[now].size(); dp[now]=-;
for(int i=number[now];i!=-;i=G[i].next)
// for(int i=0;i<len;++i)
{
int tar=G[i].to;
// int tar=G[now][i].first;
if(tar==last)continue;
// ll cost=G[now][i].second;
ll cost=G[i].cost;
dfs(tar,now,maxx+cost,!isBob);
if(dp[tar]==-)continue;
ll summ=maxx+cost+dp[tar];
if(!check(summ))continue;
if(isBob)checkMax(dp[now],dp[tar]+cost);
else checkMin(dp[now],dp[tar]+cost);
}
if(cnt[now]==&&dp[now]==-)dp[now]=;
// if(len==1&&dp[now]==-1)dp[now]=0;
} void init()
{
memset(number,-,*(n+));
memset(cnt,,*(n+));
size=;
for(int i=;i<n;++i)
{
ll a,b,c;
read_int(a);
read_int(b);
read_int(c);
// scanf("%d%d%d",&a,&b,&c);
// cin>>a>>b>>c;
// G[a].push_back(make_pair(b,c));
// G[b].push_back(make_pair(a,c)); add(a,b,c);
add(b,a,c);
}
dfs(,-,,);
if(dp[]!=-)printf("%d\n",dp[]);
// cout<<dp[0]<<"\n";
else puts("Oh, my god!");
} int main()
{
// cin.sync_with_stdio(false);
while(scanf("%d%d%d",&n,&l,&r)!=EOF&&n&&l&&r)init(); return ;
}
UVA1484 Alice and Bob's Trip (hdu3660)的更多相关文章
- hdu 3660 Alice and Bob's Trip(树形DP)
Alice and Bob's Trip Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 3660 Alice and Bob's Trip
树形dp,这道题如果选G++的话,只输入都会超时.我是C++ 1900ms + 飘过的...但是输入优化后就快了很多了,1100ms左右.dfs按层次求最值就行了,差不多也算是博弈吧,到bob取的时候 ...
- 【HDOJ】3660 Alice and Bob's Trip
就是一个基本的dfs.可关键问题是c/c++/g++光输入就超时了.还是写java过的,毕竟时限4s.都放弃希望了,没想到还真过了. import java.lang.*; import java.i ...
- UVA 1484 - Alice and Bob's Trip(树形DP)
题目链接:1484 - Alice and Bob's Trip 题意:BOB和ALICE这对狗男女在一颗树上走,BOB先走,BOB要尽量使得总路径权和大,ALICE要小,可是有个条件,就是路径权值总 ...
- 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob
Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- bzoj4730: Alice和Bob又在玩游戏
Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...
- Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)
Alice and Bob Time Limit: 1000ms Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...
- sdutoj 2608 Alice and Bob
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2608 Alice and Bob Time L ...
- hdu 4268 Alice and Bob
Alice and Bob Time Limit : 10000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
随机推荐
- linux解压与参数介绍
linux下 各种解压文件使用方法:https://www.jianshu.com/p/ca41f32420d6 解压参数详解:http://www.cnblogs.com/jyaray/archiv ...
- Js常见算法实现汇总
/*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.length; for(var ...
- MySQL JOIN | 联结
联结是利用SQL的SELECT能执行的最重要的操作.为了提高存储的有效性和避免数据冗余,往往会将有关联的数据存储在好几张表中,那么怎样用一条SELECT语句就能检索出这些数据呢? 答案是JOIN(联结 ...
- PL/SQL中模拟EBS上下文
有时,我们需要查询的表或视图,是具有OU屏蔽的,这时我们就需要模拟EBS中的上下文来实现查询数据. BEGIN fnd_global.apps_initialize(user_id =>1,re ...
- iOS-加载数据的实现-MJRefresh
使用CocoaPods加载三方库: pod 'MJRefresh' MJRefresh类结构图: 具体实现方法和效果图: The drop-down refresh 01-Default self.t ...
- JSP注释格式
一.JSP注释格式来源 JSP是Sun Microsystems公司制定的一种服务器端动态网页技术的组件规范,其主体由HTML.CSS.JavaScript和Java拼凑组成. 正是因为JSP是一种组 ...
- 自己实现的简单的grid
12年在第一家公司的时候,有过很长一段时间在前端的使用研究上.一开始的时候使用ExtJs4.0 MVC 来开发前端,觉得里面的风转的组件非常好用,Panel.window.tree等等,简化了对于前端 ...
- TestNG并发测试包
https://www.yiibai.com/testng/basic-annotations.html
- Netweaver和CloudFoundry里的trace开关
Netweaver 事务码SU01的参数设置里,有很多关于trace(跟踪)的开关. FPTRACELEVEL: 设成04后,能将ADS生成PDF的trace信息写入生成的PDF. 详细原理参考我的b ...
- python时间转换 ticks-FYI
#设a为字符串 import time a = "2011-09-28 10:00:00" #中间过程,一般都需要将字符串转化为时间数组 time.strptime(a,'%Y-% ...