hdu 1317 XYZZY spfa判断负环
2014-12-02 21:48
302 查看
#include<stdio.h> #include<queue> #include<string.h> using namespace std; const int N = 105; const int inf = 1 << 28; int a , c ; int dis ; int cost ; int vis ; int n; bool spfa() { memset(dis, 0, sizeof(dis)); memset(c, 0, sizeof(c)); memset(vis, 0, sizeof(vis)); queue<int> q; while( !q.empty() ) q.pop(); dis[1] = 100; q.push(1); vis[1] = 1; while( !q.empty() ) { int now = q.front(); q.pop(); vis[now] = 0; if( now == n ) { return 1; } if( c[now] == n+1 ) { continue; } c[now]++; if( c[now] == n+1 ) { dis[now] = inf; } for( int i = 1; i <= n; i++ ) { if( a[now][i] ) { if( dis[i] < dis[now] + cost[i] && dis[now] + cost[i] > 0 ) { dis[i] = dis[now] + cost[i]; if( !vis[i] ) { vis[i] = 1; q.push(i); } } } } } return 0; } int main() { while( ~scanf("%d", &n) && n != -1 ) { memset(a, 0, sizeof(a)); for( int i = 1; i <= n; i++ ) { int num; scanf("%d%d", &cost[i], &num); for( int j = 1; j <= num; j++ ) { int to; scanf("%d", &to); a[i][to] = 1; } } int ans = spfa(); if( ans ) printf("winnable\n"); else printf("hopeless\n"); } return 0; }
相关文章推荐
- HDU 1317 XYZZY Bellman-Ford求最长路 判断正环
- hdu 1317 XYZZY(bellman_ford判断环,有负权)
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
- HDU:1317 XYZZY(SPFA处理正环+Flody判断点连通)
- HDU 1317(Floyd判断连通性+spfa判断正环)
- HDU-1317-XYZZY(负权处理 弗洛伊德判断连通性)
- POJ 3259 Wormholes (贝尔曼算法判断负环) POJ 1860 Currency Exchange (判断正环) HDU 1217(贝尔曼判断正环)
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
- HDU 1317 XYZZ(Floyd(传递闭包)+bellmanfd(判断正权环))
- 最短路 SPFA 判断负环 静态邻接表(链式前向星) HDU 2544 最短路 POJ 3259 Wormholes
- HDU 1317--XYZZY 【spfa判断正环求最长路径 && floyd求传递闭包】
- HDU 1217 Arbitrage(最短路判断负环)
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
- HDU 1317 XYZZY【Bellman_Ford判断正环】
- hdu 1317 SPFA+连通判断+最长路
- hdu 1317 坑爹的数据!!hdu。。。你赢了。。。
- hdu 3394(求无向图块判断每个块中有多少个环)
- hdu 3926 Hand in Hand 判断两个度最多是2的无向图是否同构
- HDU 1086 You can Solve a Geometry Problem too(水题,判断线段相交)
- HDU 2444 The Accomodation of Students【二分图判断+最大匹配】