HDU 1317 XYZZY(floyd+bellman_ford判环)
生活随笔
收集整理的這篇文章主要介紹了
HDU 1317 XYZZY(floyd+bellman_ford判环)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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判环)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 星空下的痕迹 Jenkins学习(四)-
- 下一篇: 未解决-hive之drop 表分区失败