hdu 1317 XYZZY(bellman_ford判断环,有负权)
来源:互联网 发布:nat网络层 编辑:程序博客网 时间:2024/05/29 11:42
题目:
链接:点击打开链接
题意:
出发点1能量值为100,到达一个新的房间会得到一个+或-能量值,能否到终点。
思路:
用bellman_ford判断是否有环,如果存在环且能量值是大于0的,那么winnnable。如果起点1孤立,必然hopeless。
代码:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define INF 100000000struct node{ int from,to;} edge[10010];int n;int first[110],next[10010],dis[110],power[110];int map[110][110];void add(node edge,int x){ next[x] = first[edge.from]; first[edge.from] = x;}void floyd(){ for(int k=1; k<=n; k++) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(!map[i][j]) map[i][j] = map[i][j] || (map[i][k] && map[k][j]);//有向图的传递闭包 } } }}int bellman_ford(int m){ for(int i=1; i<=n; i++) dis[i] = -INF; dis[1] = 100;//起点处能量值为100 for(int k=0; k<n-1; k++) { for(int i=0; i<m; i++) { int x = edge[i].from; int y = edge[i].to; if(dis[x] + power[y] > 0 && dis[y] < dis[x] + power[y]) dis[y] = dis[x] + power[y]; } } for(int i=0; i<m; i++) { int x = edge[i].from; int y = edge[i].to; if(dis[x] + power[y] > 0 && dis[y] < dis[x] + power[y] && map[y][n]) { return 1; } } return dis[n] > 0;}void init(){ memset(edge,0,sizeof(edge)); memset(power,0,sizeof(power)); memset(map,0,sizeof(map)); memset(first,-1,sizeof(first)); memset(next,-1,sizeof(next));}int main(){ freopen("input.txt","r",stdin); int m,ct; while(scanf("%d",&n) != EOF && n != -1) { init(); ct = 0; for(int i=1; i<=n; i++) { scanf("%d%d",&power[i],&m); for(int j=1; j<=m; j++) { int x; scanf("%d",&x); edge[ct].from = i; edge[ct].to = x; map[i][x] = 1; add(edge[ct],ct); ct++; } } floyd(); if(!map[1][n]) { printf("hopeless\n"); continue; } printf("%s\n",bellman_ford(ct) == 1 ? "winnable" : "hopeless"); } return 0;}
---------------------------------------------------------
战斗,从不退缩;奋斗,永不停歇~~~~~~~~~~~
0 0
- hdu 1317 XYZZY(bellman_ford判断环,有负权)
- hdu 1317 XYZZY bellman_ford判环+floyd
- Hdu 1317 XYZZY[floyd+bellman_ford]
- hdu 1317 XYZZY spfa判断负环
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
- hdoj1317-XYZZY(floyd + bellman_ford)
- HDU 1317 XYZZY Bellman-Ford求最长路 判断正环
- HDU:1317 XYZZY(SPFA处理正环+Flody判断点连通)
- HDU-1317-XYZZY(负权处理 弗洛伊德判断连通性)
- hdu 1317 XYZZY(spfa判环)
- HDU-1317 XYZZY SPEA
- hdu 1317:XYZZY
- HDU 1317 XYZZY
- HDU 1317 XYZZY
- HDU 1317 XYZZY
- hdu 1317 XYZZY
- HDU 1317 XYZZY
- linux下常用命令
- Android中IntentService的原理及使用
- mod_python模块安装使用
- 死亡——生命的策略 新发现杂志 science &view
- tomcat 通过conf-catalina-localhost目录发布项目详解
- hdu 1317 XYZZY(bellman_ford判断环,有负权)
- oracle查看表空间情况
- Android 内存溢出解决方案(OOM) 整理总结
- SqlServer2005数据库分布式管理
- VC++获取系统时间
- 利用new定义二维数组,delete删除内存空间
- SNMP 介绍 认识OID MIB
- Eclipse+Tomcat(干货)
- 另外开发者可以进行后台数据统计分析工作