hdu-1317 XYZZY---Floyd判连通+bellman最短路
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1317
题目大意:
题意:有n个房间(n<=100),每个房间有一个点权(第1号房间和第n号房间权值均为0),到达该房间时会自动获得该点权(可能为负权)。给出一些无向边。有一个人,初始有能量值100,初始位置是第1号房间,要走到第n号房间,且路途中不得使身上能量值小于或等于0。能到达第n个房间就算赢,问能否赢。
解题思路:
这里最坑的是第一号房间可能和最后一个房间连通不了。所以首先得判断连通性,再Bellman求最短路。
如果floyd判断房间1和房间n不连通,直接输出失败
如果在第n次还在松弛并且松弛的点可以到达终点n,说明存在正环且该正环能到达n,此时一定是成功的。
如果到达n的时候能量值为正数则成功,为0或者负数则失败
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
struct edge
{
int u, v, w;
edge(){}
edge(int u, int v, int w):u(u), v(v), w(w){}
};
edge e[maxn];
bool Map[][];
int num[], n, d[maxn], tot;
void addedge(int u, int v, int w)
{
e[tot++] = edge(u, v, w);
}
void floyd()//判断连通性
{
for(int k = ; k <=n; k++)
{
for(int i = ; i <= n; i++)
{
for(int j = ; j <= n; j++)
{
Map[i][j] |= (Map[i][k]&Map[k][j]);
}
}
}
}
bool Bellman(int u)
{
memset(d, -INF, sizeof(d));
d[u] = ;
for(int i = ; i < n; i++)
{
for(int j = ; j < tot; j++)
{
int u = e[j].u, v = e[j].v, w = e[j].w;
if(d[u] + w > d[v] && d[u] > )//d[u]>0说明只有能量为正的点才可以对其相邻的边进行松弛
{
d[v] = d[u] + w;
if(i == n - && Map[v][n])
//i==n-1说明第n次迭代还在松弛,说明存在正环
//Map[v][n]=1说明松弛的点可以到达终点(这里改成Map[u][n]也是一样的,因为这两个的值是一样的,因为存在边<u, v>)
//满足上面两个条件说明存在一个正环,且该环可以到达终点
//可以一直在正环中运动使得能量值无穷大,最后就一定能到终点
return ;
}
}
}
return d[n] > ;
}
int main()
{
while(cin >> n && n != -)
{
int t, x;
tot = ;
memset(Map, , sizeof(Map));
for(int i = ; i <= n; i++)
{
cin >> num[i];
cin >> t;
while(t--)
{
cin >> x;
Map[i][x] = ;
}
}
for(int u = ; u <= n; u++)
{
for(int v = ; v <= n; v++)
{
if(Map[u][v])addedge(u, v, num[v]);
}
}
floyd();
if(!Map[][n])cout<<"hopeless"<<endl;//1-n直接不连通
else if(Bellman())cout<<"winnable"<<endl;
else cout<<"hopeless"<<endl;
}
return ;
}
hdu-1317 XYZZY---Floyd判连通+bellman最短路的更多相关文章
- HDU 1317 XYZZY(floyd+bellman_ford判环)
http://acm.hdu.edu.cn/showproblem.php?pid=1317 题意: 给出一个有向图,每到达一个点,都会加上或减去一些能量,我们要做的就是判断从1出发是否能到达n.初始 ...
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1317 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- hdu 1317 XYZZY
http://acm.hdu.edu.cn/showproblem.php?pid=1317 #include <cstdio> #include <queue> #inclu ...
- HDU 1317 XYZZY【Bellman_Ford判断正环】
题意:给出n个房间,初始在房间1有100的能量值,每次进入一个房间,能量值可能增加也可能减小,(是点权,不是边权),问能否到达终点的时候能量值还为正 这题自己写的时候wa--wa-- 后来看了题解,还 ...
- [HDU 1317]XYZZY[SPFA变形][最长路]
题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...
- UVa11549计算器谜题[floyd判圈]
题意: 有个老式计算器,每次只能记住一个数字的前n位.现在输入一个整数k,然后反复平方,一直做下去,能得到的最大数是多少.例如,n=1,k=6,那么一次显示:6,3,9,1... 白书上的题 set, ...
- SGU 455 Sequence analysis(Cycle detection,floyd判圈算法)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=455 Due to the slow 'mod' and 'div' operati ...
- UVa 1594 (Floyd判圈) Ducci Sequence
大白书上P42那个计算器的题目就用到了这个办法,Floyd判圈法. 当然,用STL里的map也是可以的. #include <cstdio> #include <cmath> ...
- UVA 11549 CALCULATOR CONUNDRUM(Floyd判圈算法)
CALCULATOR CONUNDRUM Alice got a hold of an old calculator that can display n digits. She was bore ...
随机推荐
- 浅谈JavaScript -- 正则表达式
什么是正则表达式? 正则表达式是由一个字符序列形成的搜索模式.可用于文本搜索和文本替换. 语法:/正则表达式主体/修饰符(可选) var patt=new RegExp(pattern,modifie ...
- 遍历json字符串 并 写入对应的文本框
1.js代码: function getFlws(){ var url = urlpath + "bhjk/getJson2.sd?"; $.post(url,function(d ...
- CF213E Two Permutations 线段树维护哈希值
当初竟然看成子串了$qwq$,不过老师的$ppt$也错了$qwq$ 由于子序列一定是的排列,所以考虑插入$1$到$m$到$n-m+1$到$n$; 如何判断呢?可以用哈希$qwq$: 我们用线段树维护哈 ...
- (jmeter内置可调用的变量)jmeter beanShell断言
用户可以在jmeter- “beanShell断言”中自定义断言.自由灵活的用脚本实现自己的断言 beanShell断言接口介绍 在beanShell中直接可以调用的变量,无需加前缀. 1.lo ...
- JavaMail开发
---------------------------------------------发邮件------------------------------------------ 需要jar包: j ...
- 基于nginx的FastCGI的缓存配置
废话不多说了, 直接上配置, 其实 fastcgi_cache 和 proxy_cache 的配置基本一样: # !缓存文件存放目录 # levels 缓存层次 # keys_zone 缓存空间名和共 ...
- JSTL截取字符串以及格式化时间
fn函数里面有很多好用的方法 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions& ...
- 汇编语言版本的HelloWorld
平台 macOS 工具 nasm clang 文件 main.asm extern _printf ; 这里调用系统的一个系统调用函数, _printf, 使用extern告诉链接器该label在其他 ...
- SpringBoot | 第二十一章:异步开发之异步调用
前言 上一章节,我们知道了如何进行异步请求的处理.除了异步请求,一般上我们用的比较多的应该是异步调用.通常在开发过程中,会遇到一个方法是和实际业务无关的,没有紧密性的.比如记录日志信息等业务.这个时候 ...
- ASP.NET Web.Config连接数据库(测试)
事先说明,我是看着http://jingyan.baidu.com/article/ff411625bc461712e5823775.html做的. web.Config代码(vs2010): 使用的 ...