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. Windows Phone 上拉刷新、下拉刷新

    ScrollViewer scrollViewer = new ScrollViewer(); // 构造函数 public MainPage() { InitializeComponent(); ; ...

  2. Mybatis框架插件PageHelper的使用

    在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分页 一次性请求数据表格中的所有记录(ajax),然后在前端缓存并且计 ...

  3. Session的存储原理

    一.session是怎么存储,提取的? 1.在服务器端有一个session池,用来存储每个用户提交session中的数据,Session对于每一个客户端(或者说浏览器实例)是“人手一份”,用户首次与W ...

  4. Process Monitor分析某个应用行为

    1.打开Process Mointor 2.点击filter-->filter   在弹出的对话框中Architecture 下拉框,选择Process Name 填写要分析的应用程序名字. 点 ...

  5. MySQL怎样存储IP地址 IP转数字 互转

    MySQL怎样存储IP地址 - cn三少 - 博客园 https://www.cnblogs.com/cnsanshao/p/3326648.html

  6. 云备份厂商Rubrik再获2.61亿美元融资,估值高达33亿美元 转自中国存储网

    数据管理初创公司Rubrik在Bain Capital Ventures领导的最新一轮融资中筹集了2.61亿美元,估值为33亿美元. 现有的利益相关者 - Lightspeed Venture Par ...

  7. SDL结合QWidget的简单使用说明

    SDL(Simple DirectMeida Layer)是一个简单的封装媒体库,功能主要涉及了相关于OpenGL或者DirectX的显卡硬件功能和一些鼠标,键盘等外设访问.这里主要只说明一下它的渲染 ...

  8. hdu 5056 Boring count (窗体滑动)

    You are given a string S consisting of lowercase letters, and your task is counting the number of su ...

  9. sql server 里的文件和文件组使用

    转自:https://www.cnblogs.com/woodytu/p/5821827.html 参考:https://www.sqlskills.com/blogs/paul/files-and- ...

  10. java基础语法this关键字

    未经允许,禁止转载!!!!!!!! this关键词在java里面很重要,想了解清楚this就必须对  类:对象:this:成员变量:方法:构造方法 都了解清楚. 一.使用this调用本类中的成员变量( ...