hdoj 3660 Alice and Bob's Trip(树dp)

原创 2012年03月25日 01:03:40

【题目大意】:给出一棵n个结点的树,两个人一起走,轮流决策。Alice目的是使最后距离最小,Bob则要最大。问最终走的距离能否满足区间[L,R](需要走到最后不能走,所以Alice不能不选就结束了)


【解题思路】:第一次见到这道题是去年的暑假,当初一直把它当初博弈去找必胜态和必败态,然后徒劳无功。

 下午队友把这道题切了,G++交必须用恶心的输入外挂....回来之后,顺手自己也把它写了一下,有向图很好写,O(n)而已。

                  我们设dist[u]记录0到u的距离,dp[u]记录u这点开始最终走的距离。

                  在dist[u]+dp[v]+w也就是0到u的距离,加上v开始的距离,和u到v的距离是在[L,R]之间,则进行状态的转移,也就是Alice会取min(dp[u],dp[v]+w),Bob会取max(dp[u],dp[v]+w)...

注释部分是输入挂...

【代码】:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <string>
#include <cctype>
#include <map>
#include <iomanip>
                   
using namespace std;
                   
#define eps 1e-8
#define pi acos(-1.0)
#define inf 1<<30
#define linf 1LL<<60
#define pb push_back
#define lc(x) (x << 1)
#define rc(x) (x << 1 | 1)
#define lowbit(x) (x & (-x))
#define ll long long

int n,le,ri;
int tot,eh[600000];
int dp[500500],dist[500500];

struct Edge {
    int v,w,next;
}et[600000];

/*int getint(){
    char c=getchar();
    int t=0;
    while (c<'0' || c>'9') {
        c=getchar();
    }
    while (c>='0' && c<='9') {
        t=t*10+c-'0';
        c=getchar();
    }
    return t;
}*/

void init() {
    tot=0;
    memset(eh,-1,sizeof(eh));
}

void addedge(int u,int v,int w) {
    Edge e={v,w,eh[u]};
    et[tot]=e;
    eh[u]=tot++;
}

void dfs(int u,int who) {
    dp[u]=0;
    for (int i=eh[u]; i!=-1; i=et[i].next) {
        int v=et[i].v,w=et[i].w;
        dist[v]=dist[u]+w;
        dfs(v,!who);
        if(dist[u]+dp[v]+w>=le && dist[u]+dp[v]+w<=ri) {
            if(who || dp[u]==0) dp[u]=max(dp[u],dp[v]+w);
                else dp[u]=min(dp[u],dp[v]+w);
         }
    }
    return ;
}

int main() {
    int u,v,w,i;
    while(~scanf("%d%d%d",&n,&le,&ri)) {
        init();
        memset(dist,0,sizeof(dist));
        for(int i=1; i<n; i++) {
            //u=getint(); v=getint(); w=getint();
            scanf("%d%d%d",&u,&v,&w);
            addedge(u,v,w);
        }
        dfs(0,1);
        if(ri<le || dp[0]<le || dp[0]>ri) printf("Oh, my god!\n");
        else printf("%d\n",dp[0]);
    }
    return 0;
}



2016BIT小学期——博弈DP(污神Alice和Bob)

1.题目描述: Alice: 上课好无聊啊!!! Bob:那你想干嘛? Alice:我们来玩游戏好伐? Bob:好哇!咋玩? Alice:我们写n个正整数,然后轮流拿...
  • ltyqljhwcm
  • ltyqljhwcm
  • 2016年09月10日 23:19
  • 1661

hdu4268 Alice and Bob(二维贪心的固定思想 STL的multiset的二分查找函数实现)

Link:http://acm.hdu.edu.cn/showproblem.php?pid=4268 Alice and Bob Time Limit: 10000/5000 M...
  • Enjoying_Science
  • Enjoying_Science
  • 2015年09月26日 23:19
  • 597

石子游戏 (SG函数)

题目描述Problem DescriptionAlice 和 Bob 总喜欢聚在一起玩游戏(T­_T),今天他(她)们玩的是一款新型的取石子游戏。游戏一开始有N堆石子,Alice 和 Bob 轮流取出...
  • jackypigpig
  • jackypigpig
  • 2017年03月17日 13:01
  • 226

2014多校3(1002)hdu4888(最大流(dinic))

Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja...
  • cq_phqg
  • cq_phqg
  • 2014年08月11日 19:24
  • 580

理论: 博弈3: Nim博弈

Nim博弈原型个人定义: 有n堆石头, 每ai颗石头。 Alice和Bob分别从非空的石头堆中取走至少一颗石子。Alice先取, 取光所有的石头即为获胜。当双方都采取最优策略的时候, 谁会获...
  • sun897949163
  • sun897949163
  • 2016年01月30日 20:22
  • 355

2017年集训队第四场选拔赛 -string Game

Problem A: String Game Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 55  Solved: 20 [Submit][Statu...
  • Jack_zhuiyi
  • Jack_zhuiyi
  • 2017年07月14日 06:37
  • 309

数字签名图文并茂

一 Alice 和 Bob的故事 假如现在Alice向Bob传送数字信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为:   1.Alic...
  • chengqiuming
  • chengqiuming
  • 2017年04月12日 10:20
  • 215

C++之练习题17

1.下表是进行血常规检验的正常值参考范围,及化验值异常的临床意义: 给定一张化验单,判断其所有指标是否正常,如果不正常,统计有几项不正常。化验单上的值必须严格落在正常参考值范围内,才算是正常...
  • fenger1943
  • fenger1943
  • 2014年07月24日 15:42
  • 564

(简单) 搜索 HOJ 1048 Cipher

CipherMy Tags  (Edit)Source : ACM ICPC Central European Regional 1995Time limit : 5 secMemory limit ...
  • wsx1754175
  • wsx1754175
  • 2014年02月08日 09:51
  • 402

【2016杭电女生赛1007】【博弈 打表找规律】Alice and Bob 可走k步斜对角线的胜负态

#include #include #include #include #include #include #include #include #include #include #include ...
  • snowy_smile
  • snowy_smile
  • 2016年05月22日 23:36
  • 998
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj 3660 Alice and Bob's Trip(树dp)
举报原因:
原因补充:

(最多只允许输入30个字)