UVA - 10557 XYZZY
2016-08-12 22:43
295 查看
题目大意:有 n 个房间,接下来 n 行第一个数字是该房间的能量(可增可减),第二个数字是该房间连通其他房间的个数,后面 k 个数是所连通房间编号。初始能量 100,要求过程中能量都要大于 0,问能否到达终点。
解题思路:
侵删。uva 10557 - XYZZY 关键词:正环,无敌bfs,单源最短路spfa算法 by lzw_java
侵删。SPFA算法详解
没有题解我仿佛是条死鱼……泣
解题思路:
侵删。uva 10557 - XYZZY 关键词:正环,无敌bfs,单源最短路spfa算法 by lzw_java
侵删。SPFA算法详解
没有题解我仿佛是条死鱼……泣
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; bool point[1000][1000], vis[1000]; int value[1000], energy[1000], q[10000000]; int n; bool spfa() { int t1, t2; t1 = t2 = 0; vis[0] = true; energy[0] = 100; q[t2++] = 0; int cnt = 0; while (t1 != t2) { int t = q[t1++]; for (int i = 0; i < n; i++) if (point[t][i] && energy[i] < energy[t] + value[i]) { energy[i] = energy[t] + value[i]; if (!vis[i]) { q[t2++] = i; vis[i] = true; cnt++; } } if (energy[n-1] > 0) return true; else if (cnt > 1000000) return false; vis[t] = false; } return false; } int main() { while (scanf("%d", &n) != EOF && n != -1) { memset(point, false, sizeof(point)); memset(energy, 0, sizeof(value)); memset(vis, false, sizeof(vis)); int k; for (int i = 0; i < n; i++) { scanf("%d%d", &value[i], &k); for (int j = 0; j < k; j++) { int t; scanf("%d", &t); point[i][t-1] = true; } } int tag = spfa(); if (tag) printf("winnable\n"); else printf("hopeless\n"); } return 0; }
相关文章推荐
- UVA 10557 XYZZY
- uva- 10557 XYZZY
- uva 10557 - XYZZY
- UVA - 10557 XYZZY
- XYZZY - UVa 10557 图论
- UVA - 10557 XYZZY(DFS + BFS)
- uva 10557 - XYZZY
- UVA 10557 XYZZY
- uva 10557 - XYZZY (最长路)
- uva 10557 - XYZZY
- uva10557 XYZZY
- uva 10557 XYZZY(DFS+BFS)
- UVA 10557 XYZZY
- Uva 10557 XYZZY
- UVa 10557 - XYZZY
- uva 10557 XYZZY
- UVA 10557 XYZZY
- UVA 10557 XYZZY
- Uva 10557 - XYZZY(DFS+BFS)
- uva 10557 - XYZZY 关键词:正环,无敌bfs,单源最短路spfa算法