这题,我在学搜索的时候做过。不过好像不叫这名字。

  1、先用Floyd算法判断图的连通性。如果1与n是不连通的,输出hopeless。

  2、用Bellman_Ford算法判断是否有正圈,如果某点有正圈,并且该点与第n点是连通的。就输出winnable。当然,没有正圈的情况下,可以到达也是可以的。然后就是如何找正圈的问题。Bellman_Ford算法可以判断有没有负圈。Bellman_Ford是解决最短路问题的,核心是松弛法。如果dist[v]<dist[u]+Map[u][v],则dist[v]=dist[u]+Map[u][v]。在循环n-1次以后,如果还存在dist[v]<dist[u]+Map[u][v],则说明有负圈。这样,我们找正圈也有方法了:dist数组初始化为负无穷。如果dist[v]>dist[u]+Map[u][v],则dist[v]=dist[u]+Map[u][v]。循环n-1次以后,如果还存在dist[v]>dist[u]+Map[u][v],则说明有正圈。

  其中,要注意的是。可以往下一房间走的条件是当前的能量值大于0。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = , M = N*N/, INF=0x3f3f3f3f;
int dist[N],f[N][N], g[N];
struct node
{
int x,y;
}e[M];
int n,m;
void floyd()
{
int i,j,k;
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
f[i][j]=f[i][j]||(f[k][j]&&f[i][k]); }
bool bellman_ford(int s)
{
int i,j,k;
for(i=;i<=n;i++) dist[i]= -INF;
dist[s]=;
for(i=;i<n;i++) //n-1次
{
for(j=;j<m;j++)
{
int x=e[j].x, y=e[j].y;
if(dist[y]<dist[x] + g[y]&&dist[x]+g[y]>)
dist[y]=dist[x] + g[y];
}
}
for(j=;j<m;j++)
{
int x=e[j].x, y=e[j].y;
if(dist[y]<dist[x] + g[y]&&dist[x]+g[y]>&&f[y][n]) return ; //有负环回路
}
return dist[n]>;
}
int main()
{
//freopen("test.txt","r",stdin);
int i,j,k,t;
while(scanf("%d",&n)!=EOF)
{
if(n==-) break;
m=;
memset(f,,sizeof(f));
for(i=;i<=n;i++)
{
scanf("%d%d",&g[i],&j);
while(j--)
{
scanf("%d",&k);
f[i][k]=;
e[m].x=i;e[m].y=k;
m++;
}
}
floyd();
if(!f[][n])
{
printf("hopeless\n");
continue;
}
if(bellman_ford()) printf("winnable\n");
else printf("hopeless\n");
}
return ;
}

  PS:我感觉写解题报告还是很有必要的。让自己去总结,弄明白解题思路。当然,也可以给别人提供一些思路。

hdu1317 XYZZY Floyd + Bellman_Ford的更多相关文章

  1. HDU 1317 XYZZY(floyd+bellman_ford判环)

    http://acm.hdu.edu.cn/showproblem.php?pid=1317 题意: 给出一个有向图,每到达一个点,都会加上或减去一些能量,我们要做的就是判断从1出发是否能到达n.初始 ...

  2. HDU 1317 XYZZY【Bellman_Ford判断正环】

    题意:给出n个房间,初始在房间1有100的能量值,每次进入一个房间,能量值可能增加也可能减小,(是点权,不是边权),问能否到达终点的时候能量值还为正 这题自己写的时候wa--wa-- 后来看了题解,还 ...

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

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

  4. POJ 2240 - Arbitrage(bellman_ford & floyd)

    题意: 给出一些货币和货币之间的兑换比率,问是否可以使某种货币经过一些列兑换之后,货币值增加. 举例说就是1美元经过一些兑换之后,超过1美元.可以输出Yes,否则输出No. 分析: 首先我们要把货币之 ...

  5. 最短路(Floyd)-hdu1317

    题目链接:https://vjudge.net/problem/HDU-1317 题目描述: 题意:玩家起始有100个能量点,刚开始在起始房间中,每个房间外有一条单向的路径通往其他房间(一个房间可能通 ...

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

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

  7. 最短路(Dijkstra,Floyd,Bellman_Ford,SPFA)

    当然,这篇文章是借鉴大佬的... 最短路算法大约来说就是有4种——Dijkstra,Floyd,Bellman_Ford,SPFA 接下来,就可以一一看一下... 1.Dijkstra(权值非负,适用 ...

  8. Dijkstra、Bellman_Ford、SPFA、Floyd算法复杂度比较

    参考 有空再更新下用c++, 下面用的Java Dijkstra:适用于权值为非负的图的单源最短路径,用斐波那契堆的复杂度O(E+VlgV) BellmanFord:适用于权值有负值的图的单源最短路径 ...

  9. POJ 1932 XYZZY (ZOJ 1935)SPFA+floyd

    http://poj.org/problem?id=1932 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1935 题目大 ...

随机推荐

  1. 第八章 Python之常用模块

    日志模块 import logging import logging #默认级别为warning,默认打印到终端 logging.debug( logging.info( logging.warnin ...

  2. charles修改下行参数

    1.charles抓包修改下行参数: 想要修改的手机展示展示信息页: 2.charle设置断点,在请求接口上一个上设置断点 菜单proxy->Breadkpoints Settings设置打开断 ...

  3. appium+python,app自动化测试框架

    目前正在写一个app的自动化UI测试框架,目录结构如, 脚本还在调试,实现的方法是从excel表格读取测试用例,执行完成后会将结果保存到Excel中. 等待.......

  4. open-ldap schema (2)

    schema介绍及用途 schema 是OpenLDAP 软件的重要组成部分,主要用于控制目录树中各种条目所拥有的对象类以及各种属性的定义,并通过自身内部规范机制限定目录树条目所遵循的逻辑结构以及定义 ...

  5. LightOJ - 1231 - Coin Change (I)

    先上题目: 1231 - Coin Change (I)   PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit:  ...

  6. cogs 983. [NOIP2003] 数字游戏

    983. [NOIP2003] 数字游戏 ★☆   输入文件:numgame.in   输出文件:numgame.out   简单对比时间限制:1 s   内存限制:128 MB 题目描述 丁丁最近沉 ...

  7. POJ 1985

    求一棵树内最远的两点,DFS,顺便记录以某节点为根内最远的两点的距离,返回最远点的距离.其实是DP. #include <cstdio> #include <iostream> ...

  8. POJ 1696

    这题是明显的TU包变形. 使用卷包裹法可解,而且是必定可以经过所有点的.直观可知,当经过某点后,相当于把之前的点抹去,求剩下点的TU包,递归下去,也就能把点全部经过了. 于是,只需把经过的点标记一下就 ...

  9. bootstrap checkbox

    在使用bootstrap库中的checkboxlistrow时,我想要依据checkbox是否至少选中了一个选项来确定页面的跳转,即须要在js中操作checkbox.这样就存在一个问题,一般的chec ...

  10. 恩布企业IM PC端,服务端公布 1.16 版本号

    恩布企业IM PC端,服务端公布1.16版本号,开源企业IM.免费企业即时通讯软件:主要版本号更新内容: 恩布服务端核心程序,添加进程守护保护机制,确保系统7*24持续稳定服务: 服务端添加内存数据库 ...