http://acm.hdu.edu.cn/showproblem.php?pid=1317

题意:

给出一个有向图,每到达一个点,都会加上或减去一些能量,我们要做的就是判断从1出发是否能到达n。初始能量有100,行走的途中能量不能小于等于0。

思路:

首先我们用floyd来判断一下1和n之间是否有通路。

其次就是bellman_ford算法来判正环了。

 #include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
using namespace std; const int maxn = + ;
const int INF = 0x3f3f3f3f; int n, m;
int power[];
int d[][];
int en[];
int cnt; struct node
{
int s, e;
}edge[maxn]; void floyd()
{
for (int k = ; k <= n; k++)
for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
{
d[i][j] = d[i][j] || (d[i][k] && d[k][j]);
}
} bool bellman_ford()
{
for (int i = ; i <= n; i++) en[i] = -INF;
en[] = ;
for (int i = ; i < n; i++)
{
bool flag = false;
for (int j = ; j <cnt; j++)
{
if (en[edge[j].e] < en[edge[j].s] + power[edge[j].e] && en[edge[j].s]+power[edge[j].e]>)
{
en[edge[j].e] = en[edge[j].s] + power[edge[j].e];
flag = true;
}
}
if (!flag) break;
}
for (int j = ; j < cnt; j++)
{
//这儿需要注意一下,判断正环的时候,这个正环必须能到达终点
if (en[edge[j].e] < en[edge[j].s] + power[edge[j].e] && en[edge[j].s] + power[edge[j].e]> && d[edge[j].e][n]) return true;
}
if (en[n] <= ) return false;
else return true;
} int main()
{
//freopen("D:\\input.txt", "r", stdin);
int v;
while (cin >> n && n != -)
{
memset(d, , sizeof(d));
cnt = ; for (int i = ; i <= n; i++)
{
scanf("%d%d", &power[i], &m);
while (m--)
{
scanf("%d", &v);
edge[cnt].s = i;
edge[cnt].e = v;
d[i][v] = ;
cnt++;
}
}
floyd(); //首先判断1到n是否连通
if (!d[][n])
{
printf("hopeless\n");
continue;
}
if (bellman_ford())
printf("winnable\n");
else
printf("hopeless\n");
}
}

HDU 1317 XYZZY(floyd+bellman_ford判环)的更多相关文章

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

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

  2. hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  3. hdu 1317 XYZZY

    http://acm.hdu.edu.cn/showproblem.php?pid=1317 #include <cstdio> #include <queue> #inclu ...

  4. [HDU 1317]XYZZY[SPFA变形][最长路]

    题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...

  5. hdu1317 XYZZY Floyd + Bellman_Ford

    这题,我在学搜索的时候做过.不过好像不叫这名字. 1.先用Floyd算法判断图的连通性.如果1与n是不连通的,输出hopeless. 2.用Bellman_Ford算法判断是否有正圈,如果某点有正圈, ...

  6. HDU 4514并查集判环+最长路

    点击打开链接 题意:中文题...... 思路:先推断是否能成环,之前以为是有向图,就用了spfa推断,果断过不了自己出的例子,发现是无向图.并查集把,两个点有公共的父节点,那就是成环了,之后便是求最长 ...

  7. HDU 5154 Harry and Magical Computer 有向图判环

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5154 题解: 有向图判环. 1.用dfs,正在访问的节点标记为-1,已经访问过的节点标记为1,没有访 ...

  8. floyd判环算法(龟兔赛跑算法)

    floyd判环算法(龟兔赛跑算法) 注意,这个算法是用来判断一条链+一条环的图,环的长度或者环与链的交界处的,所以此floyd非彼floyd(虽然都是一个人想出来的). (图不是我的) 如果只要求环的 ...

  9. HDU 1317:XYZZY

    Problem Description It has recently been discovered how to run open-source software on the Y-Crate g ...

随机推荐

  1. EUI组件之EditableText

    一.EditableText常规使用 EditableText是一个可输入文本,例如登陆时输入用户名.密码等. 拖动EditableText到exml即可 实际效果 其他: 1.输入密码框 设置inp ...

  2. 【BZOJ3727】PA2014 Final Zadanie 树形DP

    [BZOJ3727]PA2014 Final Zadanie Description 吉丽YY了一道神题,题面是这样的:“一棵n个点的树,每条边长度为1,第i个结点居住着a[i]个人.假设在i结点举行 ...

  3. NIO之Buffer的clear()、rewind()、flip()方法的区别

    Java的NIO中有关Buffer的几种常用方法比如clear,rewind和flip到底有哪些区别.下面给大家这三种方法的源码,方便大家记忆.clear()方法用于写模式,其作用为情况Buffer中 ...

  4. Iframe中子窗体给父窗体传值

    <html> <head> <script type="text/javascript"> function GetData(data) { a ...

  5. nginx repos

    vim /etc/yum.repos.d/nginx.repo 然后将下面的内容复制进去: [nginx] name=nginx repo baseurl=http://nginx.org/packa ...

  6. 【Python】Python 打印和输出更多用法。

    Python 打印和输出 简述 在编程实践中,print 的使用频率非常高,特别是程序运行到某个时刻,要检测产生的结果时,必须用 print 来打印输出. 关于 print 函数,前面很多地方已经提及 ...

  7. 使用 Nginx 提升网站访问速度

    使用 Nginx 提升网站访问速度 http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/ Nginx 简介 Nginx ("engine ...

  8. Selenium之Chrome浏览器的启动问题及解决

    System.setProperty("webdriver.chrome.driver","chromedriver.exe路径"); 配置好Chrome的驱动 ...

  9. jdk eclipse SDK下载安装及配置教程

    原文地址https://blog.csdn.net/dr_neo/article/details/49870587 最新鲜最详细的Android SDK下载安装及配置教程 最近Neo突发神经,想要将学 ...

  10. 转: C# 根据当前时间获取,本周,本月,本季度等时间段 .Net中Exception

    DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Convert.ToInt32(dt.DayOfWeek.T ...