Easy sssp(spfa)(负环)】的更多相关文章

描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的带权有向图. 要求你写一个程序, 判断这个有向图中是否存在负权回路. 如果从一个点沿着某条路径出发, 又回到了自己, 而且所经过的边上的权和小于0, 就说这条路是一个负权回路.如果存在负权回路, 只输出一行-1;如果不存在负权回路, 再求出一个点S(1 <= S <= N)到每个点的最短路的长度. 约定: S到S的距离为0, 如果S与这个点不连通, 则输出NoPath. 格…
正常spfa中加入time数组,循环判断一个点是否入队并更新了n次以上注意是 > n!!其余的没有什么问题 扩展的还有,寻找所有负环上的点,这个可以在spfa中time 发现负环的时候,对那个点进行dfs操作,找到所有的负环上的点即可 void dfs(int u) { cir[u] = 1; for(int i = id[u];~i;i = edge[i].pre) { if(!cir[edge[i].to]) dfs(edge[i].to); } } 一下负权回路代码以poj3259为例(p…
https://vjudge.net/problem/UVA-11090 平均权值最小的回路 为后面的做个铺垫 二分最小值,每条边权减去他,有负环说明有的回路平均权值小于他 spfa求负环的时候可以先把所有点加到队列里,d[i]=0 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; ; ,INF=1e9; inl…
题目传送门 题意:收过路费.如果最后的收费小于3或不能达到,输出'?'.否则输出到n点最小的过路费 分析:关键权值可为负,如果碰到负环是,小于3的约束条件不够,那么在得知有负环时,把这个环的点都标记下,DFS实现. #include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; const int N = 2e2 + 5; cons…
 POJ 3259 Wormholes Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu   Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way…
/* - - 这题做了一天.....粗心害死人啊 题目描述恶心 数据更恶心... 先处理一下能走的边 能走的点(到这建边从终点跑一下.) 然后就是SPFA了 注意负环的判断 */ #include<iostream> #include<cstdio> #include<cstring> #include<queue> #define maxn 1110 #define maxm 10010 #define inf 999999999 using namesp…
Description Dhaka city is getting crowded and noisy day by day. Certain roads always remain blocked in congestion. In order to convince people avoid shortest routes, and hence the crowded roads, to reach destination, the city authority has made a new…
3597: [Scoi2014]方伯伯运椰子 题意: from mhy12345 给你一个满流网络,对于每一条边,压缩容量1 需要费用ai,扩展容量1 需要bi, 当前容量上限ci,每单位通过该边花费di,限制网络流量不能改变.调整后必须满 流,设调整了K 次,使得费用减少量为D,最大化D/K 就是给你一个费用流,但不是最小,增广的费用为b+d,退流的费用为a-d 就是正反向增广路 根据消圈定理,流f为mcmf当且仅当无负费用增广圈 01分数规划+spfa求负环即可 #include <iost…
题意:N个点,分别有属于自己的N个busyness(简称b),两点间若有边,则边权为(ub-vb)^3.Q个查询,问从点1到该点的距离为多少. 分析:既然是差的三次方,那么可能有负边权的存在,自然有可能出现负环.第一次用Dijkstra做,没多想,样例过了就去交了,结果肯定是WA了.之后加入了对负环的判断.很明显,如果在SPFA的算法过程中,若点u进出队列的次数达到N(N次松弛操作),那么u肯定在负环中.此外,u的邻接点v的距离dist[v]也必然<3,因为dsit[u]可以取到一个极小值.通过…
题目 传送门 题解 这个题是一个经典的分数规划问题. 把题目形式化地表示,就是 \[Minimize\ \lambda = \frac{\sum W_{i, i+1}}{k}\] 整理一下,就是 \[\lambda * k = \sum W_{i, i+1}\] 定义新的函数 \[g(\lambda) = Min(\lambda * k - \sum W_{i, i+1})\] 显然这个函数单调,我们二分\(\lambda\),等价于求一个负环. 如果用spfa求负环会Tle,所以学习了用dfs…