题意:有N个房间,刚开始你位于1号房间,有100的能量值,你要到达N号房间,每两个房间之间有单向门相连接,你到达某个房间可以加上该房间的能量值,

如果你在未到达N号房间之前能量值耗尽,则死亡,否则胜利。

解析:spfa,设power[]是从1到达某个点的能量值,如果power[v]<power[u]+energy[v],(power[1]设置为100,其他设置为0)则更新,所以power[]

不会出现负数的情况,由于可能出现环的情况,所以要设置spfa次数上限,我设的10000,应该足够了,设置小了会wa。可以自己尝试一下。

代码如下:

#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<iterator>
#include<utility>
#include<sstream>
#include<iostream>
#include<cmath>
#include<stack>
using namespace std;
const int INF=;
const double eps=0.00000001;
vector<int> G[];
int N;
int energy[],power[]; // energy是房间的能量值,power是从1到达某个房间的能量值
bool vis[];
int cnt[]; // 访问次数
bool spfa()
{
memset(vis,false,sizeof(vis));
memset(power,,sizeof(power));
memset(cnt,,sizeof(cnt));
power[]=;
vis[]=true;
queue<int> que;
que.push();
while(!que.empty())
{
int now=que.front(); que.pop();
vis[now]=false;
for(int i=;i<G[now].size();i++)
{
int to=G[now][i];
if(power[now]+energy[to]>power[to]&&cnt[to]<=) // 次数上限为10000
{
power[to]=power[now]+energy[to]; // 更新
cnt[to]++;
if(!vis[to])
{
vis[to]=true;
que.push(to);
}
}
}
if(power[N]>) return true; //为真
} return false;
}
int main()
{
while(cin>>N)
{
if(N==-) break;
for(int i=;i<=N;i++) G[i].clear();
for(int i=;i<=N;i++)
{
int k;
scanf("%d%d",&energy[i],&k);
for(int j=;j<=k;j++)
{
int to;
scanf("%d",&to);
G[i].push_back(to);
}
}
if(spfa()) printf("winnable\n");
else printf("hopeless\n");
}
return ;
}

UVA10557- XYZZY(spfa+设置次数上限)的更多相关文章

  1. [HDU 1317]XYZZY[SPFA变形][最长路]

    题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...

  2. XYZZY(spfa求最长路)

    http://acm.hdu.edu.cn/showproblem.php?pid=1317 XYZZY Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  3. XYZZY spfa 最长路 判环

    题意: 有n个点  m条边  每个边有权值 一开始有一百血  每次经过一条路都会加上其权值 判断是否能够到达n 显然  有正环的时候肯定能够到达 最短路好题!!!!!!! 显用folyed判断是否联通 ...

  4. unity, 设置帧率上限

    用unity做了个demo,把所有开销大的特效都去了,在真机上运行仍然卡.显示帧率来看,最高到30.原来unity在ios设备上帧率默认限制为不超过30. 可以通过Application.target ...

  5. HDU 1373 XYZZY (spfa的特殊用法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1317 题目大意:有n个房间,编号1-n,房间之间有单向门连接.某人初始位于1号房间,且具有100点能量 ...

  6. (转)SPFA算法

    原文地址:http://www.cnblogs.com/scau20110726/archive/2012/11/18/2776124.html 粗略讲讲SPFA算法的原理,SPFA算法是1994年西 ...

  7. 转载:SPFA算法学习

    转载地址:http://www.cnblogs.com/scau20110726/archive/2012/11/18/2776124.html 粗略讲讲SPFA算法的原理,SPFA算法是1994年西 ...

  8. SPFA算法——最短路径

    粗略讲讲SPFA算法的原理,SPFA算法是1994年西南交通大学段凡丁提出 是一种求单源最短路的算法 算法中需要用到的主要变量 int n;  //表示n个点,从1到n标号 int s,t;  //s ...

  9. 【SPFA与Dijkstra的对比】CDOJ 1961 咸鱼睡觉觉【差分约束-负权最短路径SPFA】

    差分约束系统,求最小值,跑最长路. 转自:https://www.cnblogs.com/ehanla/p/9134012.html 题解:设sum[x]为前x个咕咕中至少需要赶走的咕咕数,则sum[ ...

随机推荐

  1. Android带参数链接请求服务器

    public void taste() { //设默认值 SharedPreferences.Editor editor = this.getSharedPreferences("setti ...

  2. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

  3. C# 邮件发送注意事项

    使用QQ邮箱作为smtp服务器时,遇到 "命令顺序不正确. 服务器响应为: AUTH first..",解决办法: smtpClient.UseDefaultCredentials ...

  4. The requested URL ***** was not found on this serve

    Wamp的Alias具体是干什么用的,后面要研究一下!!!! 我是之前创建了一个站点用Alias,后来把站点文件移到了www下后,除了首页都访问不了了.显示“The requested URL *** ...

  5. 黑马程序员-hashtable

    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列 ...

  6. android - 模拟器连接本地tomcat

    在使用android真机试图连接本地的tomcat的时候,发现一直没有反应.网上搜了很多资料,加上自己不断测试,后来发现模拟器访问tomcat的时候,ip的概念跟在pc上访问tomcat用的ip,根本 ...

  7. xfire找不到services.xml

    java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened be ...

  8. linux dd命令测试U盘读写速度

    1. dd命令简述: if=输入文件, of=输出文件, ibs=一次读取字节数, obs=一次写入字节数, bs=设置一次读取写入的字节数, skip=跳过的bs数, count=拷贝的块数 2. ...

  9. svn更新

    下载配置文件 pwd cd /home/www/xxxx/protected/config/ get main.php 上传配置文件 put main.php svn更新 svn co svn://s ...

  10. extjs之messagebox按钮显示中文

    在extjs中我们用到了很多的提示框,但是在对话框按钮上面显示的都是英文的ok.yes.no.cancel,这里给出一个方法,能够使得提示框的按钮文本显示问中文. extjs在加载完成之后会调用页面的 ...