http://poj.org/problem?id=1932

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1935

题目大意:

看到XYZZY可不要以为是在玩扫雷哦。

给你一张图,初始你在房间1,初始生命值为100,进入每个房间会加上那个房间的生命(可能为负),要你进入房间n,问是否可能。(要求进入每个房间后生命值都大于0)

思路:

1、SPFA求最长路径,如果路径存在(即无环),那么肯定可以。

2、存在负环,不管她,因为如果为负,那就失败了。

3、存在正环,那么说明有无限生命((╯‵□′)╯︵┻━┻ 开挂啊,快举报!),不过无限生命也要求你可达n(我WA了就是因为这个!)

那么如何判断存在环?

用SPFA中,如果一个点入队超过n次,说明存在环。 - -|||

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int INF=-9999999;
const int MAXN=111;//注孤 - -|||
bool map[MAXN][MAXN];
int val[MAXN],dis[MAXN];
int n;
bool SPFA()
{
for(int i=1;i<=n;i++)
dis[i]=INF; bool vis[MAXN]={0}; int cnt[MAXN]={0}; queue<int> q;
q.push(1);
vis[1]=true;
dis[1]=100;
cnt[1]=1; while(!q.empty())
{
int cur=q.front();
q.pop();
if(cnt[cur] > n)
break;
vis[cur]=false;
for(int i=1;i<=n;i++)
{
if(map[cur][i]==true && dis[cur] + val[i] > dis[i]
&& dis[cur] + val[i] > 0 )
{
dis[i]=dis[cur] + val[i];
if(!vis[i])
{
q.push(i);
vis[i]=true;
cnt[i]++;
}
}
}
} if(dis[n]>0)
return true;
else
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(map[i][k] && map[k][j])
map[i][j]=true; for(int i=1;i<=n;i++)
if(cnt[i]>n && map[1][i] && map[i][n]) //忘记要从i到N了
return true;
return false;
}
} int main()
{
while(~scanf("%d",&n),n!=-1)
{
memset(map,0,sizeof(map));
memset(val,0,sizeof(val)); for(int i=1;i<=n;i++)
{
int cnt,temp;
scanf("%d %d",&val[i],&cnt);
for(int j=1;j<=cnt;j++)
{
scanf("%d",&temp);
map[i][temp]=true;
}
} if(SPFA())
puts("winnable");
else
puts("hopeless"); }
return 0;
}

POJ 1932 XYZZY (ZOJ 1935)SPFA+floyd的更多相关文章

  1. poj 1932 XYZZY(spfa最长路+判断正环+floyd求传递闭包)

    XYZZY Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 4154   Accepted: 1185 Description ...

  2. poj 1932 XYZZY (最短路径)

    XYZZY Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3105   Accepted: 887 Description ...

  3. 最短路算法详解(Dijkstra/SPFA/Floyd)

    新的整理版本版的地址见我新博客 http://www.hrwhisper.me/?p=1952 一.Dijkstra Dijkstra单源最短路算法,即计算从起点出发到每个点的最短路.所以Dijkst ...

  4. PKU 1932 XYZZY(Floyd+Bellman||Spfa+Floyd)

    题目大意:原题链接 给你一张图,初始你在房间1,初始生命值为100,进入每个房间会加上那个房间的生命(可能为负),问是否能到达房间n.(要求进入每个房间后生命值都大于0) 解题思路: 解法一:Floy ...

  5. POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)

    POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...

  6. HDU 2992 Hotel booking(BFS+DFS 或者 SPFA+Floyd)

    点我看题目 题意 : 一个司机要从1点到达n点,1点到n点中有一些点有宾馆,司机的最长开车时间不能超过10小时,所以要在10小时之内找到宾馆休息,但是为了尽快的走到n点,问最少可以经过几个宾馆. 思路 ...

  7. spfa+floyed+最长路+差分约束系统(F - XYZZY POJ - 1932)(题目起这么长感觉有点慌--)

    题目链接:https://cn.vjudge.net/contest/276233#problem/F 题目大意:给你n个房子能到达的地方,然后每进入一个房子,会消耗一定的生命值(有可能是负),问你一 ...

  8. POJ 1502 MPI Maelstrom( Spfa, Floyd, Dijkstra)

    题目大意: 给你 1到n ,  n个计算机进行数据传输, 问从1为起点传输到所有点的最短时间是多少, 其实就是算 1 到所有点的时间中最长的那个点. 然后是数据 给你一个n 代表有n个点, 然后给你一 ...

  9. Poj(2195),最小费用流,SPFA

    题目链接:http://poj.org/problem?id=2195 Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

随机推荐

  1. [易飞]一张领料单单身仓库&quot;飞了&quot;引起的思考

    [摘要]我司每月月初10号前財务要出报表.故10号前要做完毕本月结. PMC经理接到仓管员反馈. 物料-30408011003在账上怎么还有那么多?上次发料的时候已发完. 相应的领料单:5403-20 ...

  2. hadoop集群环境配置成功与否查看方法

    1.Hadoop启动jobhistoryserver来实现web查看作业的历史运行情况,由于在启动hdfs和Yarn进程之后,jobhistoryserver进程并没有启动,需要手动启动jobhist ...

  3. POJ 3050 枚举+dfs+set判重

    思路: 枚举+搜一下+判个重 ==AC //By SiriusRen #include <set> #include <cstdio> using namespace std; ...

  4. Kinect 开发 —— 录音

    不涉及语音识别~~ <Window x:Class="KinectRecordAudio.MainWindow" xmlns="http://schemas.mic ...

  5. ajax的使用(一)

        ajax向服务器异步发送和接受数据,然后用JavaScript解析.Ajax核心规范的名称继承于你用来建立和发送请求的JavaScript对象:XMLHttpRequest.这个规范有两个等级 ...

  6. Spring boot 解析jsp支持jsp热部署

    解析jsp并且支持jsp热部署 参考地址:https://www.wanpishe.top/detail?blogId=39875536-7d45-48ec-a7b5-f36b85c3a235

  7. 今日SGU 5.5

    SGU 114 题意:求一个点到其他点的距离总和最小,距离的定义是x轴距离乘以那个点的人数p 收获:带权中位数,按坐标排序,然后扫一遍,最后权值超过或等于总权值的一半时的那个点就是答案,证明暂无 #i ...

  8. 百度Echarts-免费的商业产品图表库

    官方网站:http://echarts.baidu.com/ 民间网站:http://fansunion.cn/echarts/ 下载地址:https://codeload.github.com/ec ...

  9. wmic linux python

    sudo aptitude install wmi-client Example of usage is; wmic -U DOMAIN/administrator%password //10.99. ...

  10. 1.22 Python基础知识 - 正则表达式

    Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re ...