HDU 1317 XYZZY

题意是指 从1 到 N 能否保证 到达每个点的时候 能量都为正数。

起点 1 初始100 点能量。

输入是 从 1 ~ N , 分别是 能量,能到m个房间, 分别是 a1,a2,a3,…,am

可以给每个能到达的点 而 产生的边赋权,即能量值。

SPFA 求最长路的变形,出现负环不怕,出现正环就需要一点改动。

vis[]标记是否需要入队,d[] 表示能量,que[] 表示入队次数。

如果出现正环(que[v]>=n),表明一定能 保证到达每个点的时候都是正能量。

这时候直接 将 d[v] 赋最大值(因为可以一直循环获得正能量),并下一次的时候不再入队。

最后 d[n]>0 表明能行。

//C++ 0ms
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<cmath>
#define INF 0xfffffff
#define eps 1e-6
using namespace std;
int n,m;
struct lx
{
    int v,en;
};
vector<lx> g[101];

int d[101];
bool vis[101];
int que[101];
void SPFA()
{
    for(int i=1; i<=n; i++)
        d[i]=-INF,vis[i]=0,que[i]=0;
    queue<int>q;
    d[1]=100,vis[1]=1,que[1]=1;
    q.push(1);
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        vis[u]=0;
        if(que[u]>n)continue;// >=  WA
        for(int j=0; j<g[u].size(); j++)
        {
            int v=g[u][j].v;
            int en=g[u][j].en;
            if(d[v]<d[u]+en&&d[u]+en>0)
            {
                d[v]=d[u]+en;
                if(!vis[v])
                {
                    vis[v]=1;
                    q.push(v);
                    if(++que[v]>=n)d[v]=INF;
                }
            }
        }
    }
    if(d[n]>0)puts("winnable");
    else puts("hopeless");
}
int main()
{
    while(scanf("%d",&n),n!=-1)
    {
        int en,v,u;
        for(int i=0; i<=n; i++)
            g[i].clear();
        for(int i=1; i<=n; i++)
        {
            u=i;
            scanf("%d%d",&en,&m);
            lx now;
            now.en=en;
            while(m--)
            {
                scanf("%d",&v);
                now.v=v;
                g[u].push_back(now);
            }
        }
        SPFA();
    }
}

HDU 1317 XYZZY,布布扣,bubuko.com

时间: 2024-10-14 12:40:03

HDU 1317 XYZZY的相关文章

hdu 1317 XYZZY(spfa判环)

http://acm.hdu.edu.cn/showproblem.php?pid=1317 大致题意:有n个房间,每个房间都有对应的能量值(可正可负),现在从1出发要到达n,初始能量为100,问是否能够达到n点,到达n的条件是中间及最后的能量值都要大于0. 思路:若不考虑环,那么求最长路判断是否大于0即可.若存在负环,对求最长路也没影响:但当存在正环时,最长路就不存在了.可用spfa判断,当某点入队超过n次,那么它必定在环中,直接将其dis置为INF,并不再将其近队列.最后若能到达n则可行,否

HDU 1317 XYZZY (SPFA 找正环 + Floyd 判连通)

XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3004    Accepted Submission(s): 817 Problem Description It has recently been discovered how to run open-source software on the Y-Crate gami

HDU 1317 XYZZY(floyd+bellman_ford判环)

http://acm.hdu.edu.cn/showproblem.php?pid=1317 题意: 给出一个有向图,每到达一个点,都会加上或减去一些能量,我们要做的就是判断从1出发是否能到达n.初始能量有100,行走的途中能量不能小于等于0. 思路: 首先我们用floyd来判断一下1和n之间是否有通路. 其次就是bellman_ford算法来判正环了. 1 #include <iostream> 2 #include <cstring> 3 #include <algori

hdu 1317 XYZZY 国产SPFA算法AC,,题目输入部分真特么难懂。。内有解析

XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3017    Accepted Submission(s): 824 Problem Description It has recently been discovered how to run open-source software on the Y-Crate gami

HDU 1317 XYZZY【Bellman_Ford判断正环】

题意:给出n个房间,初始在房间1有100的能量值,每次进入一个房间,能量值可能增加也可能减小,(是点权,不是边权),问能否到达终点的时候能量值还为正 这题自己写的时候wa--wa-- 后来看了题解,还是wa---wa--- 题解很详细http://blog.csdn.net/freezhanacmore/article/details/9937327 记录下自己犯的错误吧 首先是floyd函数初始化的时候,直接写在了函数里面,这样是不对的,因为输入值在前,调用函数在后,这样就相当于将之前输入的可

HDU - 1317 XYZZY (floyd + 最长路)

题目大意:有一种游戏,游戏里面有N个房间,每个房间有相应的能量值,走入该房间就可以得到相应的能量值 现在你要从房间1出发,走到房间N,如果中途能量耗尽了,就表示输了,反之,则为赢 解题思路:首先得判断一下能不能到达N,这可以用Floyd去判断 如果能直接走到N的话,就算赢,否则判断一下,看是否有正环,且正环中有点能到N #include <cstdio> #include <cstring> #include <algorithm> #include <vecto

HDOJ 1317 XYZZY

spfa找正环 XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2344    Accepted Submission(s): 589 Problem Description It has recently been discovered how to run open-source software on the Y-Cr

HDU 1317(Floyd判断连通性+spfa判断正环)

XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4421    Accepted Submission(s): 1252 Problem Description It has recently been discovered how to run open-source software on the Y-Crate gami

hdu 1317 SPFA+连通判断+最长路

Description It has recently been discovered how to run open-source software on the Y-Crate gaming device. A number of enterprising designers have developed Advent-style games for deployment on the Y-Crate. Your job is to test a number of these design