http://poj.org/problem?id=1932

spfa求最长路,判断dist[n] > 0,需要注意的是有正环存在,如果有环存在,那么就要判断这个环上的某一点是否能够到达n点,如果能,就说明可以到达,否则,就说明不能。

 /*************************************************************************
> File Name: poj1932.cpp
> Author: syhjh
> Created Time: 2014年03月04日 星期二 16时54分43秒
************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std; const int MAXN = ( + );
const int inf = 0x3f3f3f3f;
int n, st, energy[MAXN];
int dp[MAXN], Count[MAXN];
vector<int > g[MAXN];
bool mark[MAXN]; bool spfa()
{
for (int i = ; i <= n; i++) dp[i] = -inf;
memset(mark, false, sizeof(mark));
memset(Count, , sizeof(Count));
queue<int > que;
que.push();
dp[] = ;
while (!que.empty()) {
int u = que.front();
que.pop();
mark[u] = false;
if (Count[u]++ > n || u == n) {
st = u;
return true;
}
for (int i = ; i < (int)g[u].size(); i++) {
int v = g[u][i];
if (dp[u] + energy[v] > dp[v] && dp[u] + energy[v] > ) {
dp[v] = dp[u] + energy[v];
if (!mark[v]) {
mark[v] = true;
que.push(v);
}
}
}
}
return false;
} void dfs(int u)
{
mark[u] = true;
for (int i = ; i < (int)g[u].size(); i++) {
int v = g[u][i];
if (!mark[v]) dfs(v);
}
} int main()
{
while (cin >> n && n != -) {
for (int i = ; i <= n; i++) g[i].clear();
for (int i = ; i <= n; i++) {
int u, k;
cin >> energy[i] >> k;
while (k--) {
cin >> u;
g[i].push_back(u);
}
}
st = -;
if (spfa()) {
memset(mark, false, sizeof(mark));
dfs(st);
if (mark[n]) {
cout << "winnable" << endl;
} else
cout << "hopeless" << endl;
} else if (dp[n] > ) {
cout << "winnable" << endl;
} else
cout << "hopeless" << endl;
}
return ;
}

spfa求最长路的更多相关文章

  1. XYZZY(spfa求最长路)

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

  2. POJ 3592--Instantaneous Transference【SCC缩点新建图 &amp;&amp; SPFA求最长路 &amp;&amp; 经典】

    Instantaneous Transference Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 6177   Accep ...

  3. HDU - 6201 transaction transaction transaction(spfa求最长路)

    题意:有n个点,n-1条边的无向图,已知每个点书的售价,以及在边上行走的路费,问任选两个点作为起点和终点,能获得的最大利益是多少. 分析: 1.从某个结点出发,首先需要在该结点a花费price[a]买 ...

  4. 洛谷 P3627 [APIO2009]抢掠计划 Tarjan缩点+Spfa求最长路

    题目地址:https://www.luogu.com.cn/problem/P3627 第一次寒假训练的结测题,思路本身不难,但对于我这个码力蒟蒻来说实现难度不小-考试时肛了将近两个半小时才刚肛出来. ...

  5. POJ 3126 --Father Christmas flymouse【scc缩点构图 &amp;&amp; SPFA求最长路】

    Father Christmas flymouse Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 3007   Accep ...

  6. hdu 1534(差分约束+spfa求最长路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...

  7. HDU 1224 Free DIY Tour(spfa求最长路+路径输出)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1224 Free DIY Tour Time Limit: 2000/1000 MS (Java/Oth ...

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

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

  9. 训练赛 Grouping(强连通分量缩点 + DAG求最长路)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=158#problem/F 大致题意:给出n个人和m种关系(ti,si),表示ti ...

随机推荐

  1. PowerDesigner16.5 连64位MySQL,出错:SQLSTATE = IM014。原因及解决方案

  2. Unity3D研究院之手游开发中所有特殊的文件夹(转)

    这里列举出手游开发中用到了所有特殊文件夹. 1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor  和 /Edi ...

  3. selenium 配合sikuli script操作高德地图

    会不会使用工具,是一般QA和高级QA的区别 ---To be crazy Java就是好,开源框架遍地都是,各种niubility的jar包,各种神器,真是不亦乐乎. 今天研究一下基于图片识别作为对象 ...

  4. jboss服务器修改端口说明

    如果一台机器安装多个jboss服务器,就需要修改服务器的端口号,否则各个服务器之间会有冲突.目前确认需要修改的配置如下一.vi $JBOSS_HOME/server/default/conf/jbos ...

  5. 【leetcode】Permutations (middle)

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  6. Rsync+lsync实现触发式实时同步

    使用rsync+lsync实现触发式实时同步 服务器信息 centos6.5 主:192.168.5.4 搭建lsync 从:192.168.5.3 搭建rsync 1.1 从服务器设置 # yum ...

  7. GridView中使用分页控件

    前台:导入<%@ Register assembly="AspNetPager" namespace="Wuqi.Webdiyer" tagprefix= ...

  8. centOS填坑笔记(一)

    第一次使用centOS安装软件时,对二进制包的./configure进行配置时(./configure是源代码安装的第一步,主要的作用是对即将安装的软件进行配置,)报错:WARNING: failed ...

  9. Mysql 调用存储过程的两种方式

    一,使用call语句: 如:创建 call 调用: 使用占位符,通过prepare,execute调用:

  10. JS判断是否为IE浏览器 包含了IE11

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...