洛谷 P3385 【模板】负环 题解
P3385 【模板】负环
题目描述
暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索
寻找一个从顶点1所能到达的负环,负环定义为:一个边权之和为负的环。
输入格式
第一行一个正整数T表示数据组数,对于每组数据:
第一行两个正整数N M,表示图有N个顶点,M条边
接下来M行,每行三个整数a b w,表示a->b有一条权值为w的边(若w<0则为单向,否则双向)
输出格式
共T行。对于每组数据,存在负环则输出一行"YE5"(不含引号),否则输出一行"N0"(不含引号)。
输入输出样例
输入 #1
2
3 4
1 2 2
1 3 4
2 3 1
3 1 -3
3 3
1 2 3
2 3 4
3 1 -8
输出 #1
N0
YE5
说明/提示
n\leq 2000n≤2000
m\leq 3000m≤3000
-10000\leq w\leq 10000−10000≤w≤10000
T\leq 10T≤10
建议复制输出格式中的字符串。 本题数据感谢@negiizhao的精心构造,请不要使用玄学算法 本题数据有更
【思路】
SPFA判负环
有点想喷这个题
为什么输出YE5和N0
注意这里是YE 和 5(数字5不是S)
N 和 0(数字0不是O)
这就很坑人了吧
一般粗心一点的人就会情不自禁的写上了YES和NO(字母版)
然后就gg
会不会是出题人出不出来难题就那这个东西来恶心人QWQ
【题目分析】
多个图判断有没有负环
【核心思路】
根据题目给出的要求建一个图
然后用SPFA开始跑
前面出现了几个点
用一个计数器记录每个点前面出现了几个点
也就是这个点到前面走过来的链
如果这条链的长度大于了n
超出了点数
那就证明重复走了某些点
SPFA重复走
这就可以说明出现了负环
然后输出YE5就好了
如果没有重复走
那就输出N0
SPFA判负环的详情解释请见
这里
【注意】
每次建图之前要先把前面的东西清空一下下
然后
再说一遍输出YE5和N0
【完整代码】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define int long long
using namespace std;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
const int Max = 3010;
const int MMax = 2010;
struct node
{
int y,ne,z;
}a[Max << 1];
int sum = 0;
int head[MMax];
void add(int x,int y,int z)
{
a[++ sum].y = y;
a[sum].ne = head[x];
a[sum].z = z;
head[x] = sum;
}
int n,m;
bool use[MMax];
int d[MMax],cnt[MMax];
bool SPFA()
{
memset(cnt,0,sizeof(cnt));
memset(use,false,sizeof(use));
for(register int i = 1;i <= n;++ i)
d[i] = 999999999;
d[1] = 0;
queue<int>q;
q.push(1);
while(!q.empty())
{
int qwq = q.front();
q.pop();use[qwq] = false;
for(register int i = head[qwq];i != 0;i = a[i].ne)
{
int awa = a[i].y;
if(d[awa] > d[qwq] + a[i].z)
{
d[awa] = d[qwq] + a[i].z;
cnt[awa] = cnt[qwq] + 1;
if(cnt[awa] > n)
return false;
if(use[awa] == false)
{
use[awa] = true;
q.push(awa);
}
}
}
}
return true;
}
signed main()
{
int t;
t = read();
while(t --)
{
n = read(),m = read();
sum = 0;
int a,b,w;
memset(head,0,sizeof(head));
for(register int i = 1;i <= m;++ i)
{
a = read();b = read();w = read();
add(a,b,w);
if(w >= 0)
add(b,a,w);
}
if(SPFA() == true)
cout << "N0" << endl;
else
cout << "YE5" << endl;
}
return 0;
}
洛谷 P3385 【模板】负环 题解的更多相关文章
- 洛谷P3385 [模板]负环 [SPFA]
题目传送门 题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M,表示图有N个 ...
- 洛谷P3385判负环——spfa
题目:https://www.luogu.org/problemnew/show/P3385 两种方法,dfs和bfs: 一开始写的dfs,要把dis数组初值赋成0,这样从一个连着负边的点开始搜: 在 ...
- 洛谷 P3385 【模板】负环 (SPFA)
题意:有一个\(n\)个点的有向图,从\(1\)出发,问是否有负环. 题解:我们可以用SPFA来进行判断,在更新边的时候,同时更新路径的边数,因为假如有负环的话,SPFA这个过程一定会无限重复的遍历这 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 洛谷P4047 [JSOI2010]部落划分题解
洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...
- 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)
洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...
- 题解【洛谷P3385】【模板】负环
题目描述 暴力枚举/\(SPFA\)/\(Bellman-ford\)/奇怪的贪心/超神搜索 寻找一个从顶点1所能到达的负环,负环定义为:一个边权之和为负的环. 输入输出格式 输入格式 第一行一个正整 ...
- <题解>洛谷P3385 【模板】负环
题目链接 判断一张图中是否存在关于顶点1的负环: 可以用SPFA跑一遍,存在负环的情况就是点进队大于n次 因为在存在负环的情况下,SPFA会越跑越小,跑进死循环 在最差的情况下,存在的负环长度是“n+ ...
随机推荐
- Python 基础-import 与 from...import....
简单说说python import与from-import- 在python用import或者from-import来导入相应的模块.模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需 ...
- windows操作系统更改 <远程桌面> 端口号
windows远程桌面连接默认使用的是3389端口,为了避免被他人扫描从而暴力破解远程服务器或者病毒入侵.可以将默认端口修改为其它端口,如8888,11111等.最好修改为10000以后的端口,这样可 ...
- C# vb .net实现过度曝光效果滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的过度曝光效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...
- C# vb .net实现缩放特效滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的缩放特效呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...
- How do you run an interactive process in Dart?
https://stackoverflow.com/questions/12682269/how-do-you-run-an-interactive-process-in-dart The test ...
- Java 之 MyBatis(一)入门
一.Mybatis 框架概述 (1)mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动.创建连接.创 ...
- ABAP-表修改日志存储
1.设置了变更文档的,可以通过查看标准表CDHDR,CDPOS SE38 -- RSUSR200 ST03N -- 专家模式 2.SE16N维护的数据,可以查看表SE16N_CD_KEY,S ...
- 【转】StackTraceElement获取方法调用栈的信息
本文链接:https://blog.csdn.net/hp910315/article/details/52702199 一.什么是StackTrace StackTrace(堆栈轨迹)存放的就是方法 ...
- 笔谈 cocoapods的安装与使用
因为要重构播放器库,所以就需要参考网上的开源项目,在播放器开源项目这块,kxmovie开源项目是值得参考的一个项目.在github下载下来后,运行该工程,发现其用到了cocoapods来管理第三方库, ...
- scrapy 爬虫中间件 deepth深度
源码 class DepthMiddleware(object): def __init__(self, maxdepth, stats, verbose_stats=False, prio=1): ...