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 ...
随机推荐
- 消耗战——dp+虚树
题目 [题目描述] 在一场战争中,战场由 $n$ 个岛屿和 $n-1$ 个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为 $1$ 的岛屿,而且他们已经没有足够多 ...
- ajax跨域问题解决方案(jsonp,cors)
跨域 跨域有三个条件,满足任何一个条件就是跨域 1:服务器端口不一致 2:协议不一致 3:域名不一致 解决方案: 1.jsonp 在远程服务器上设法动态的把数据装进js格式的文本代码段中,供客户端调用 ...
- springIOC源码解析之BeanDefinition的注册
ApplicationContext类结构 context是一个存储上下文结构的东西,里面会引用BeanFactory BeanFactory类结构 我们从这句代码开始分析,(本文spring采用的 ...
- Topoi 测验1301, 问题C: 1959: 解题 解题报告
Topoi(一个经常会炸的网站) 本题提交链接 很久以前的题目了, 刚开了博客,来写一波题解 先看一波提交记录: 调了好几天QAQ 唉! 要是这些高手里有我估计直接 输出1 就AC了 算法 DFS + ...
- 对sass通过compass进行编译
1.创建一个Compass项目:compass create myproject 其中myproject是项目名称.2.编写scss文件.3.编译成css文件:①:Compass的编译命令是:comp ...
- 浅谈ThreadLocal模式
一.前言: ThreadLocal模式,严格意义上不是一种设计模式,而是java中解决多线程数据共享问题的一个方案.ThreadLocal类是java JDK中提供的一个类,用来解决线程安全问题,并不 ...
- HDU 2473 Junk-Mail Filter 并查集,虚拟删除操作
http://acm.hdu.edu.cn/showproblem.php?pid=2473 给定两种操作 第一种是合并X Y 第二种是把X分离出来,就是从原来的集合中分离出来,其它的关系不变. 关键 ...
- malloc内存申请--释放-收缩
一.验证思路和代码 #include <stdio.h> #include <unistd.h> #include <malloc.h> #include < ...
- 深刻理解Linux进程间通信(IPC)
https://www.ibm.com/developerworks/cn/linux/l-ipc/ linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管 ...
- Oracle的表操作,约束
回顾MySQL创建表语句users(id整型/name字符串/birthday日期型,默认今天)drop table if exists users;create table if not exist ...