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. WebGoat学习(一)--环境搭建

    参考https://www.owasp.org/index.php/Category:OWASP_WebGoat_Project https://github.com/WebGoat/WebGoat ...

  2. Python: PS 滤镜--扇形变换

    本文用 Python 实现 PS 滤镜中的一种几何变换特效,称为扇形变换,将图像扭曲成一个扇形,具体的算法原理和效果图可以参考以前的博客: http://blog.csdn.net/matrix_sp ...

  3. 实用的 Python 包 —— 使用 win32 的剪贴板

    1. usage >> import win32clipboard >> win32clipboard.OpenClipboard() >> win32clipbo ...

  4. 68.connect-flash 用法详解 req,flash()

    转自:http://yunkus.com/connect-flash-usage/ connect-flash 用法详解  前端工具  2016-10-05  2016-10-05  朝夕熊  11 ...

  5. Zabbix + Grafana

    Grafana 简介 Grafana自身并不存储数据,数据从其它地方获取.需要配置数据源 Grafana支持从Zabbix中获取数据 Grafana优化了图形的展现,可以用来做监控大屏 Grafana ...

  6. Android java.lang.NoSuchFieldError: No static field xxx of type I in class Lcom/XX/R$id; or its superclasses

    项目开发快到尾声,突然发现之前一个模块莫名其妙的奔溃了,我的内心也是奔溃的.以前一直都是好好的,也没去动过它,为啥会出现这样的问题呢? 下面我会根据自己的理解来看待问题 android是怎么根据id查 ...

  7. Spark存储体系

    作为分布式应用,Spark的数据存储在不同机器上.这就涉及到数据的传输,元数据的管理等内容.而且由于Spark可以利用内存和磁盘作为存储介质,这还涉及到了内存和磁盘的数据管理. Spark存储体系架构 ...

  8. 跟我一起造轮子 手写springmvc

    原创地址:https://www.cnblogs.com/xrog/p/9820168.html 作为java程序员,项目中使用到的主流框架多多少少和spring有关联,在面试的过程难免会问一些spr ...

  9. 【Mysql】将Excel表导入至Mysql的当中一张表

    如果表格有A(整型字段).B(整型字段).C(字符串数据)三列数据,希望导入到Mysql中数据库中表格table.table中须要插入的字段各自是col1,col2,col3 1.在随意一列,如果在D ...

  10. SGU 253 Theodore Roosevelt 快速判断点是否在凸包内

    http://acm.sgu.ru/problem.php?contest=0&problem=253 题意简单易懂...给你n个点的凸包(经测试已经是极角序)...判断m个点是否在凸包内.. ...