spfa求最长路
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求最长路的更多相关文章
- XYZZY(spfa求最长路)
http://acm.hdu.edu.cn/showproblem.php?pid=1317 XYZZY Time Limit: 2000/1000 MS (Java/Others) Memor ...
- POJ 3592--Instantaneous Transference【SCC缩点新建图 && SPFA求最长路 && 经典】
Instantaneous Transference Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 6177 Accep ...
- HDU - 6201 transaction transaction transaction(spfa求最长路)
题意:有n个点,n-1条边的无向图,已知每个点书的售价,以及在边上行走的路费,问任选两个点作为起点和终点,能获得的最大利益是多少. 分析: 1.从某个结点出发,首先需要在该结点a花费price[a]买 ...
- 洛谷 P3627 [APIO2009]抢掠计划 Tarjan缩点+Spfa求最长路
题目地址:https://www.luogu.com.cn/problem/P3627 第一次寒假训练的结测题,思路本身不难,但对于我这个码力蒟蒻来说实现难度不小-考试时肛了将近两个半小时才刚肛出来. ...
- POJ 3126 --Father Christmas flymouse【scc缩点构图 && SPFA求最长路】
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3007 Accep ...
- hdu 1534(差分约束+spfa求最长路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...
- 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 ...
- [HDU 1317]XYZZY[SPFA变形][最长路]
题意: 一个图, 点权代表走到该点可获得的能量值. 可正可负. 一个人从1 号出发,带有100点能量. 问是否有一种方案可使人在能量值>0的时候走到n. 思路: 这个题首先要注意点权. 其实就是 ...
- 训练赛 Grouping(强连通分量缩点 + DAG求最长路)
http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=158#problem/F 大致题意:给出n个人和m种关系(ti,si),表示ti ...
随机推荐
- android 和iOS的view上的区别
android上的view的类叫View, 以下是它的class overview, This class represents the basic building block for user i ...
- PHP生命周期
2015-08-19 15:05:30 周三 一篇很好的文章 PHP内核探索 总结一下 1. 模块初始化 MINIT 各个PHP模块/扩展初始化内部变量, 告诉PHP调用自己的函数时, 函数体在哪里( ...
- 正确理解 clear:both
要注意以下几点: 1. 浮动元素会被自动设置成块级元素,相当于给元素设置了display:block(块级元素能设置宽和高,而行内元素则不可以). 2. 浮动元素后边的非浮动元素显示问题. 3. 多个 ...
- sql server 行转列(转载)
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- Struts 2, 值在验证失败回到原来页面的时候会丢失的解决方案
比如,当我要添加一个信用卡的时候,我需要信用卡的CardType, 这些数据是存在数据库中的,我要先通过action 的一个 create方法,取到信用卡的类型: public String crea ...
- 【XLL API 函数】 xlFree
用于释放使用 Excel4,Excel4v,Excel12,Excel12v 分配的 XLOPER/XLOPER12 占用的内存资源. xlFree 函数释放辅助内存和重置指针为NULL但不释放XLO ...
- 分页Bean终极封装
package org.guangsoft.vo; import java.util.List; public class Page { private Integer pageNum; privat ...
- Ajax与Jquery题库
一. 填空题 1.在JQuery中被誉为工厂函数的是 $() . 2.在jQuery中需要选取<div>元素里所有<a>元素的选择器是 $("div a&quo ...
- 无法定位序数4369于动态链接库libeay32.dll
c:\windows\system32目录下应该有libeay32.dll,可能它过于陈旧,需要换一个新版本的libeay32.dll
- error TRK0002
运行程序出现error TRK0002的原因是因为3ds max中打开了程序生成的模型,同时使用导致memory conflict,然后随之出现一些乱七八糟的问题. 只要将3ds max重置即可,即不 ...