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

题意:

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

思路:

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

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

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <vector>
 5 #include <queue>
 6 #include <cmath>
 7 using namespace std;
 8
 9 const int maxn = 10000 + 5;
10 const int INF = 0x3f3f3f3f;
11
12 int n, m;
13 int power[105];
14 int d[105][105];
15 int en[105];
16 int cnt;
17
18 struct node
19 {
20     int s, e;
21 }edge[maxn];
22
23 void floyd()
24 {
25     for (int k = 1; k <= n; k++)
26     for (int i = 1; i <= n; i++)
27     for (int j = 1; j <= n; j++)
28     {
29         d[i][j] = d[i][j] || (d[i][k] && d[k][j]);
30     }
31 }
32
33 bool bellman_ford()
34 {
35     for (int i = 1; i <= n; i++)   en[i] = -INF;
36     en[1] = 100;
37     for (int i = 1; i < n; i++)
38     {
39         bool flag = false;
40         for (int j = 0; j <cnt; j++)
41         {
42             if (en[edge[j].e] < en[edge[j].s] + power[edge[j].e] && en[edge[j].s]+power[edge[j].e]>0)
43             {
44                 en[edge[j].e] = en[edge[j].s] + power[edge[j].e];
45                 flag = true;
46             }
47         }
48         if (!flag)  break;
49     }
50     for (int j = 0; j < cnt; j++)
51     {
52         //这儿需要注意一下,判断正环的时候,这个正环必须能到达终点
53         if (en[edge[j].e] < en[edge[j].s] + power[edge[j].e] && en[edge[j].s] + power[edge[j].e]>0 && d[edge[j].e][n])  return true;
54     }
55     if (en[n] <= 0)     return false;
56     else return true;
57 }
58
59
60 int main()
61 {
62     //freopen("D:\\input.txt", "r", stdin);
63     int v;
64     while (cin >> n && n != -1)
65     {
66         memset(d, 0, sizeof(d));
67         cnt = 0;
68
69         for (int i = 1; i <= n; i++)
70         {
71             scanf("%d%d", &power[i], &m);
72             while (m--)
73             {
74                 scanf("%d", &v);
75                 edge[cnt].s = i;
76                 edge[cnt].e = v;
77                 d[i][v] = 1;
78                 cnt++;
79             }
80         }
81         floyd();     //首先判断1到n是否连通
82         if (!d[1][n])
83         {
84             printf("hopeless\n");
85             continue;
86         }
87         if (bellman_ford())
88             printf("winnable\n");
89         else
90             printf("hopeless\n");
91     }
92 }

转载于:https://www.cnblogs.com/zyb993963526/p/6670359.html

HDU 1317 XYZZY(floyd+bellman_ford判环)相关推荐

  1. HDU 1217 Arbitrage (Floyd + SPFA判环)

    题目链接:HDU 1217 Arbitrage 简单的货币转换问题,给定多种货币,以及货币之间的汇率,问能否通过货币的转换实现收益. 例如: 1 US Dollar buys 0.5 British ...

  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

    大意:起始点100HP,给定n个房间,进入房间内加上或者减去 wHP,同一房间可以进入多次,问能否到达终点(HP大于0).起点0,终点n-1. 思路: 假设图中没有环,如果要到达终点,则需让剩下的HP ...

  4. hdu 1317——XYZZY

    http://blog.csdn.net/dongshimou/article/details/35984917

  5. hdu 1625(floyd判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1625. 思路:大牛说是floyd判环,一想确实如此,我还一直在想如果用记忆化的怎么处理环呢...orz ...

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

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

  7. Algorithm Set:floyd判环法

    目录 1.1 适用情况 1.2 复杂度 1.3 判断是否存在环 1.4 找到环的入口 1.5 代码实现 1.1 适用情况 该算法用于解决一个数组/链表中是否存在环的情况! 1.2 复杂度 时间复杂度: ...

  8. hdu 3560(dfs判环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560 思路:dfs判环,这里成环的条件是环中的每个点的出度和入度都为1,因此dfs的时候只须判断的相连 ...

  9. Ice_cream's world I HDU - 2120(并查集判环)

    题意:问给出的望塔之间的建造了围墙,将土地分成了几份 思路:用并查集判环,若有围墙相接的瞭望塔,有相同的父根,则存在环 ice_cream's world is a rich country, it ...

最新文章

  1. Pig自定义过滤UDF和加载UDF
  2. Java功底之static、final、this、super
  3. python中 和is的区别_关于python中的is和==的区别
  4. windows phone 学习之页面导航和数据传递
  5. flask与js交互的示例代码_dapr实战(1):dapr locally环境的搭建和部署官方的Hello world示例...
  6. windows+caffe下对CIFAR训练
  7. 我们变成了最小的,当我们发现不了最弱小的时候
  8. 前端http请求跨域问题解决
  9. 关于“指针数组”和”数组指针“
  10. 提示No input file specified的解决方法
  11. JavaScript版MD5应用
  12. ADS实验报告二:滤波器的仿真设计
  13. 百度搜索无法显示搜索结果
  14. 高通骁龙845的android手机有哪些,骁龙845手机买什么好 目前6款最值得买的骁龙845手机推荐...
  15. 非计算机,如何学习计算机视觉
  16. ffmpeg 用于转换视频格式的各种命令行
  17. u盘怎么装服务器系统教程,u盘装服务器系统教程
  18. 双非本科生进大厂,而我还在底层默默地爬树(上)
  19. coldfusion php,将一些PHP移植到ColdFusion
  20. Javascript-introduce

热门文章

  1. 启动标志_牛股启动的标志:天衣无缝。
  2. 透视映射和射影映射的关系 Perspective and Projectivity
  3. C++11强类型枚举,override/final
  4. c++ primer 5th第13章拷贝控制知识点和自编习题答案
  5. 概率论-4.2中心极限定理(待补充)
  6. c++11-final
  7. php日期提示警告,php程序报date()警告的处理的解决方法
  8. 用xfire开发webservice实例
  9. warning modified in the future
  10. 1万小时贫穷定律:为什么你越忙越穷?