spfa判负环

如果一个点在spfa中被入队了大于n次

那么,我们就能肯定,有负环出现。

因为一个点入队时,他肯定被更新了一次。

所以........ 如果不存在负权环。这个点最多被更新节点数次

我们就可以利用这个性质判负环

亏我dijk写了一上午

题目

语文模板题

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int dis[11000];
struct L
{
int point;
int weight;
int nxt;
};
L line[100000];
int head[10000],tail;
bool exist[100000];
int inque[100000];
queue<int> q;
int n,m;
void add(int x,int y,int val)
{
line[++tail].point=y;
line[tail].weight=val;
line[tail].nxt=head[x];
head[x]=tail;
}
void spfa(int begin)
{
memset(dis,0x3f,sizeof(dis));
memset(exist,0,sizeof(exist));
dis[begin]=0;
exist[begin]=true;
inque[begin]+=1;
q.push(begin);
int pass;
while(!q.empty())
{
pass=q.front();
q.pop();
exist[pass]=false;
if(inque[pass]>n)
{
printf("Forever love");
exit(0);
}
for(int need=head[pass];need;need=line[need].nxt)
if(dis[pass]+line[need].weight<dis[line[need].point])
{
dis[line[need].point]=dis[pass]+line[need].weight;
if(!exist[line[need].point])
{
q.push(line[need].point);
inque[line[need].point]+=1;
exist[line[need].point]=true;
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
int a,b,c;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,-1*c);
}
spfa(1);
int ha=dis[n];
spfa(n);
printf("%d",min(ha,dis[1]));
return 0;
}

spfa判负权边的更多相关文章

  1. poj 3621 二分+spfa判负环

    http://poj.org/problem?id=3621 求一个环的{点权和}除以{边权和},使得那个环在所有环中{点权和}除以{边权和}最大. 0/1整数划分问题 令在一个环里,点权为v[i], ...

  2. POJ 3259 Wormholes(SPFA判负环)

    题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...

  3. Poj 3259 Wormholes(spfa判负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...

  4. poj 1364 King(线性差分约束+超级源点+spfa判负环)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14791   Accepted: 5226 Description ...

  5. BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划

    BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...

  6. 浅谈SPFA判负环

    目录 SPFA判负环 [前言] [不可代替性] [具体实现] SPFA的过程 判负环 [核心代码] [例题] SPFA判负环 有不足的地方请指出 本蒟蒻一定会修改吼 [前言] 最短路的求法中最广为人知 ...

  7. [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案

    题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...

  8. [HNOI2009]最小圈 分数规划 spfa判负环

    [HNOI2009]最小圈 分数规划 spfa判负环 题面 思路难,代码简单. 题目求圈上最小平均值,问题可看为一个0/1规划问题,每个边有\(a[i],b[i]\)两个属性,\(a[i]=w(u,v ...

  9. [ACdream 1215 Get Out!]判断点在封闭图形内, SPFA判负环

    大致题意:在二维平面上,给一些圆形岛屿的坐标和半径,以及圆形船的位置和半径,问能否划到无穷远的地方去 思路:考虑任意两点,如果a和b之间船不能通过,则连一条边,则问题转化为判断点是否在多边形中.先进行 ...

随机推荐

  1. my.资料

    领回梦丹 http://ka.gamedog.cn/card/2036517.html 1. 普陀的加点没有优点缺点之分,只有是否和你的装备般配.这里可以给一些小数据参考. 60级物理防御达到900, ...

  2. pgadmin-linux-centos7.3-连接pgsql

    每次远程连接linux-centos上面的pgsql的时候,需要修改ip,命令如下: -->cd /var/lib/pgsql/data -->vi pg_hba.conf 添加ip如下, ...

  3. oracle命令查看表结构及表索引

    --查看oracle数据库的单个表结构 select dbms_metadata.get_ddl('TABLE','TABLE_NAME') from dual; 括号里面有两个参数,第一个参数是我们 ...

  4. 信息检索和自然语言处理 IR&NLP howto

    课程: 6.891 (Fall 2003): Machine Learning Approaches for Natural Language Processing http://www.ai.mit ...

  5. HDU 2819 ——Swap——————【最大匹配、利用linker数组、邻接表方式】

     Swap Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  6. mysql+C#

    MySqlParameter[] prams = ]; prams[] = new MySqlParameter("@personindex", personindex); pra ...

  7. 启动和停止GlassFish Server

    您可以使用NetBeans IDE或命令行启动和停止GlassFish Server.   使用NetBeans IDE启动GlassFish Server 单击“服务”选项卡. 展开服务器. 右键单 ...

  8. spring aop xml中配置实例

    http://blog.csdn.net/wangpeng047/article/details/8560694

  9. 关于UnitOfWork

    按照http://martinfowler.com/eaaCatalog/unitOfWork.html这篇文章的介绍,UnitOfWork是为了维护对象的变化,A Unit of Work keep ...

  10. 在mac上使用github for mac 创建并上传项目

    1.下载github for mac https://mac.github.com/ 2.登陆 偏好设置 3.用Xcode 创建一个项目,勾上“create local git respository ...