hdu 3660 Realtime Status(树形dp)
来源:互联网 发布:ios 判断app网络权限 编辑:程序博客网 时间:2024/06/05 16:09
题目链接:点击打开链接
题意:Alice和Bob两个人从根0出发,轮流选择路径,Bob开始选,在满足总距离在区间[l,r]内,Bob总是选使总距离最大的路径走,Alice总是选使总距离最小的路径走,求最后走的总距离的最大值
dp[i]表示两人从节点i出发满足各自要求的极值(对于Bob来说是最大值,对于Alice来说是最小值)
对于Bob:dp[i]=max(dp[i],we+dp[v])
对于Alic:dp[i]=min(dp[i],we+dp[v])
两人各自的选择标准不一样,dp[i]综合了两个人的选择
//下面的代码一直超时,从其他博客找代码试着交了交,也是超时......
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>using namespace std;#define M 0x3f3f3f3fstruct node{int to;int we;int next;}edge[500005];int cnt,head[500005];int n,l,r,dp[500005];void Add(int x,int y,int z){cnt++;edge[cnt].to=y;edge[cnt].we=z;edge[cnt].next=head[x];head[x]=cnt;}void DP(int x,int dis,int turn){int i=head[x];if(!i){dp[x]=0;return;}dp[x]=turn?M:-1;for(;i;i=edge[i].next){int to=edge[i].to;DP(to,dis+edge[i].we,turn^1);if(dp[to]==-1||dp[to]==M){//走该节点 to 满足不了全程[l,r]的要求continue;}int te=dis+edge[i].we+dp[to];if(te>=l&&te<=r){if(turn|1){dp[x]=max(dp[x],te-dis);}else{dp[x]=min(dp[x],te-dis);}}}}int main(){int x,y,z;while(scanf("%d%d%d",&n,&l,&r)!=EOF){cnt=0;memset(head,0,sizeof(head));for(int i=1;i<n;i++){scanf("%d%d%d",&x,&y,&z);Add(x,y,z);}DP(0,0,0);if(dp[0]!=-1){printf("%d\n",dp[0]);}else{printf("Oh, my god!\n");}}return 0;}
1 0
- hdu 3660 Realtime Status(树形dp)
- hdu 2492 Realtime Status
- HDU 3007 Realtime Status 最小圆覆盖
- hdu4284 Realtime Status 状压dp TSP问题 最短路
- HDU杭电1426-Realtime Status 数独问题
- 【树形DP---未解决】hdu 3660
- 树形dp hdu Computer
- 【树形DP】hdu 1520
- hdu 1054 #树形DP
- hdu 4303 树形dp
- hdu 4340 树形dp
- hdu 4340 树形DP
- HDU 4340 树形DP
- hdu 4267 树形dp
- hdu 4383 树形dp
- HDU 2196 树形dp
- HDU 2196 树形dp
- hdu 1054 树形dp
- 学习Linux命令(3)
- 搜索人生之——遗憾
- 【haut 1262: 魔法宝石】+ 暴力
- [LeetCode]300. Longest Increasing Subsequence
- hibernate中的cascade属性
- hdu 3660 Realtime Status(树形dp)
- 【MySQL】20个经典面试题,全部答对月薪10k+
- Oracle条件语句
- 线性表实现之多项式
- *运算符,->运算符重载与智能指针
- Unity之Tango运动跟踪(二)
- js数据结构与算法----栈与队列
- 图片上传(Base64)
- hibernate中的cascade属性