题目链接:https://cn.vjudge.net/contest/283066#problem/L

题目大意:T组测试样例,n个点,m条边,每一条边的信息是起点,终点,边权。问你是不是存在负环,如果存在的话输出-inf,否则的话,输出最小路径(两个点之间)。

具体思路:一般的spfa只能判断一个点到其他点的最短距离,但是这个题目让我们求的是任意两个点之间的,所以我们可以通过超级源点的建立,从超级源点到每一个点都引一条边权为0的边,然后通过超级源点作为spfa的起点,就可以判断出最短距离了。

ps:当所有的边权都大于0的时候,这种情况需要特殊讨论,因为spfa的0点的初始边权是0,如果按照spfa的话,根本不会进入循环,因为只要一进入循环,dis就会增大。

AC代码:

 #include<iostream>
#include<stack>
#include<cmath>
#include<cstring>
#include<stdio.h>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int mod = 1e9+;
const int maxn = 2e4+;
const int maxedge= 5e4+;
int vis[maxn],head[maxn];
int dis[maxn];
int num,flag;
struct node
{
int fr;
int to;
int cost;
int nex;
} edge[maxedge];
void spfa(int u)
{
if(flag)return ;
vis[u]=;
for(int i=head[u]; i!=-; i=edge[i].nex)
{
int v=edge[i].to;
if(dis[u]+edge[i].cost<dis[v])
{
dis[v]=dis[u]+edge[i].cost;
if(vis[v])
{
flag=;
}
else
spfa(v);
}
}
vis[u]=;
}
void init()
{
memset(vis,,sizeof(vis));
memset(head,-,sizeof(head));
memset(dis,inf,sizeof(dis));
num=;
flag=;
}
void addedge(int fr,int to,int cost)
{
edge[num].to=to;
edge[num].cost=cost;
edge[num].nex=head[fr];
head[fr]=num++;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
init();
int n,m;
scanf("%d %d",&n,&m);
int t1,t2,t3;
int minn=inf;
for(int i=; i<=m; i++)
{
scanf("%d %d %d",&t1,&t2,&t3);
addedge(t1,t2,t3);
minn=min(minn,t3);
}
// if(minn>=0){
// printf("%d\n",minn);
// continue;
// }
for(int i=; i<=n; i++)
{
addedge(,i,);
}
dis[]=;
spfa();
if(flag)
printf("-inf\n");
else
{
int minn=inf;
for(int i=; i<=n; i++)
{
minn=min(minn,dis[i]);
}
printf("%d\n",minn);
}
}
return ;
}

L - The Shortest Path Gym - 101498L (dfs式spfa判断负环)的更多相关文章

  1. BZOJ 1715: [Usaco2006 Dec]Wormholes 虫洞 DFS版SPFA判负环

    Description John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N ...

  2. [BZOJ 1486][HNOI2009]最小圈(二分答案+dfs写的spfa判负环)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1486 分析:容易想到先二分答案x,然后把所有边的权值-x,那么如果图中存在权值和为0的 ...

  3. SPFA找负环(DFS) luogu3385

    SPFA找负环的基本思路就是如果一个点被访问两次说明成环,如果第二次访问时所用路径比第一次短说明可以通过一直跑这个圈将权值减为负无穷,存在负环 有bfs和dfs两种写法,看了一些博客,在bfs和dfs ...

  4. Shortest Path(思维,dfs)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  5. ACM学习历程—HDU4725 The Shortest Path in Nya Graph(SPFA && 优先队列)

    Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...

  6. AOJ GRL_1_B: Shortest Path - Single Source Shortest Path (Negative Edges) (Bellman-Frod算法求负圈和单源最短路径)

    题目链接: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_B   Single Source Shortest Path ...

  7. The Shortest Path in Nya Graph---hdu4725(spfa+扩点建图)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4725  有n个点,每个点都有一个层l[i],相邻层的边有一条无向带权边,权值为都为C,另外 ...

  8. 2013成都邀请赛J称号||HDU4725 The Shortest Path in Nya Graph(spfa+slf最短的优化)

    职务地址:HDU 4725 这题卡了好长时间了,建图倒是会建,可是不会最短路的算法优化,本以为都须要堆去优化的,打算学了堆之后再来优化.可是昨晚CF的一道题..(那题也是不优化过不了..)然后我就知道 ...

  9. HDU 4725 The Shortest Path in Nya Graph(spfa+虚拟点建图)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4725 题目大意:有n层,n个点分布在这些层上,相邻层的点是可以联通的且距离为c,还有额外给出了m个条边 ...

随机推荐

  1. Tomcat server.xml中Connector配置参数详解

    Tomcat中Connector常用配置 Tomcat中server.xml有些配置信息是需要我们了解的,最起码知道如何进行简单的调试. <Connector port="8080&q ...

  2. Trailing Zeroes (III) LightOJ - 1138(二分)

    You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in d ...

  3. MT【67】窥一斑知全豹

    已知$f(x)=ax^2+bx+c$在$x\in\{-1,0,1\}$时满足$|f(x)|\le1$ 求证:当$|x|\le1$时$|f(x)|\le\frac{5}{4}$. 证明: $$f(x)= ...

  4. AGC 016 F - Games on DAG(状压dp)

    题意 给你一个有 \(n\) 个点 \(m\) 条边 DAG 图,点的标号和拓扑序一致. 现在有两个人进行博弈,有两个棋子分别在 \(1, 2\) 号点上,需要不断移动到它指向的点上. 如果当前两个点 ...

  5. 07 zabbix之map拓扑标签中macro应用

    zabbix之map拓扑标签中macro应用 请先预习网地图map : 请点击 macro官方文档介绍 : 请点击 1.  Map labels(拓扑图标签)主要注意以下Macros(宏):  MAC ...

  6. HTML 百度地图API调用示例源码

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. 洛谷P3195 玩具装箱TOY

    题目大意: 有n个数,要将他们分成若干段,每一段的cost定义为: cost=r-l+ΣCk (k∈[r,l]) 该段的最终花费是:(cost-L)^2; 给出L,n,C(1~n),总共的最小花费. ...

  8. 灯 & 树

    这回是两道题一起... [USACO09NOV]灯 [中山市选2009]树 题意:给您一些灯,以及一些边.每次改变一盏灯的时候,它相邻的灯也会变.求把灯状态全部转换的最小操作次数. 解: 解异或方程组 ...

  9. 在Kubernetes集群中安装Helm及证书认证

    安装Kubernetes 测试环境使用kubeadm安装kubernetes v1.6.3版本, 安装过程略过. 为Helm创建客户端认证 客户端认证是为了能够使用helm命令行调用Helm的服务端T ...

  10. Scala进阶之路-Scala中的Ordered--Ordering

    Scala进阶之路-Scala中的Ordered--Ordering 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   说道对象的比较,在Java中大家最熟悉不过的就是实现类本身实 ...