LG P2285 [模板]负环(spfa判负环)
题目描述
寻找一个从顶点1所能到达的负环,负环定义为:一个边权之和为负的环。
输入格式
第一行一个正整数T表示数据组数,对于每组数据:
第一行两个正整数N M,表示图有N个顶点,M条边
接下来M行,每行三个整数a b w,表示a->b有一条权值为w的边(若w<0则为单向,否则双向)
输出格式
共T行。对于每组数据,存在负环则输出一行"YE5"(不含引号),否则输出一行"N0"(不含引号)。
样例输入
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
样例输出
N0
YE5
数据范围和提示
m\leqslant 3000
-10000\leqslant w\leqslant 10000
T\leqslant 10
\]
建议复制输出格式中的字符串。 本题数据感谢@negiizhao的精心构造,请不要使用玄学算法。本题数据有更新
思路
作为一道模板题也没什么好说的。。不过坑有以下几点:
- 只能用朴素spfa,而不能加优化qwq。新的数据卡了spfa优化。所以:正权图用dijkstra,负权图用朴素spfa,spfa优化在负权图上往往是负优化。
- 那几个字符串,YE5后面是5不是S,N0后面是0不是N。。。
实现和代码
和朴素spfa没有太大区别,只是每个点的入队次数最多\(n-1\)次(如果是\(n\)次,就直接返回有负环)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int T,n,m,vis[2005],dis[2005];
vector<int>v[2005],val[2005];
queue<int>q;
bool spfa(int s)
{
while(!q.empty()) q.pop();
memset(dis,0x3f3f3f3f,sizeof(dis));
dis[1]=0;
q.push(1);
while(!q.empty())
{
int f=q.front();q.pop();int sz=v[f].size();
for(int i=0;i<sz;i++)
{
int e=v[f][i];
if(dis[f]+val[f][i]<dis[e])
{
vis[e]++;
if(vis[e]<n)
{
q.push(e);
dis[e]=dis[f]+val[f][i];
}
else
{
return true;
}
}
}
}
return false;
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++) v[i].clear();
for(int i=1;i<=n;i++) val[i].clear();
memset(vis,0,sizeof(vis));
vis[1]=1;
for(int i=1;i<=m;i++)
{
int aa,bb,ww;
scanf("%d %d %d",&aa,&bb,&ww);
if(ww<0) v[aa].push_back(bb),val[aa].push_back(ww);
else
{
v[aa].push_back(bb);
v[bb].push_back(aa);
val[aa].push_back(ww);
val[bb].push_back(ww);
}
}
if(spfa(1)) printf("YE5\n");
else printf("N0\n");
}
return 0;
}
LG P2285 [模板]负环(spfa判负环)的更多相关文章
- SPFA判负环模板
void DFS_SPFA(int u){ if(flag) return; vis[u]=true; for(int i=head[u];i;i=edges[i].nxt){ if(fl ...
- [模板]SPFA判负环
目录 一.BFS法判负环 二.DFS法判负环 三.SPFA判正环 一.BFS法判负环 Code: #include<bits/stdc++.h> #define re register # ...
- 浅谈SPFA判负环
目录 SPFA判负环 [前言] [不可代替性] [具体实现] SPFA的过程 判负环 [核心代码] [例题] SPFA判负环 有不足的地方请指出 本蒟蒻一定会修改吼 [前言] 最短路的求法中最广为人知 ...
- 【原创】SPFA判负环
[定义与概念] 给定一张有向图,若其中存在一个环的所有权值之和为负数,这个环称为负环. [算法实现] 当然,负环的求解可以暴搜,但是时间复杂度就难以入眼了,我们回到求解单源最短路径算法上面,看看它们能 ...
- POJ 3259 Wormholes(SPFA判负环)
题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...
- Poj 3259 Wormholes(spfa判负环)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 42366 Accepted: 15560 传送门 Descr ...
- spfa判负环
bfs版spfa void spfa(){ queue<int> q; ;i<=n;i++) dis[i]=inf; q.push();dis[]=;vis[]=; while(!q ...
- poj 1364 King(线性差分约束+超级源点+spfa判负环)
King Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14791 Accepted: 5226 Description ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
随机推荐
- mysql报错码code=exited,status=2的解决方案
由于电脑死机,导致MySQL无法重启. 解决方案看官方文档,设置完后重启失败,再把innodb_force_recovery = 1去掉就可以了 https://dev.mysql.com/doc/r ...
- Java Collection Framework 备忘点
最顶端是两个接口,集合和映射—— Collection<T> / Map<K, V> List 列表 保持插入顺序 ArrayList 擅长随机读 LinkedList ...
- 【做题记录】Codeforces做题记录
最近决定写一些CF Div.1的题,练习一下速度和代码能力. 暂定从中考后的Codeforces Round #572开始. 大部分比较简单的题直接把题解写在这里,不单独开文章了. Codeforce ...
- python+Django+mysql环境搭建
为什么我的毕业设计还要用到网站啊啊啊啊.什么鬼啊,又要做爱拍拍又要做网站???饶了我啊..我选择狗带.. 网站就用django做吧,毕竟之前做过一个电脑销售网站,希望能借鉴一下经验什么的,不要一切从头 ...
- Linux 系统配置永久性时间同步
临时修改系统时间(reboot后系统时间恢复): date 查看系统时间 date -s "设置的系统时间" 永久性修改系统时间: date 查看系统时间 hwclock --s ...
- 验证HashSet和HashMap不是线程安全
JAVA集合类: java.util包下的HashSet和HashMap类不是线程安全的, java.util.concurrent包下的ConcurrentHashMap类是线程安全的. 写2个测试 ...
- Unity3d 烘培lightingmap 注意的2点.
1.在Qulity里面设置合适的灯光数量.否则,你会发现烘培出来的场景,有些灯光没有起作用. 2.在导入模型时候,注意勾选:Generate Lightingmap . 否则,模型没办法烘培. 3. ...
- 微信小程序 — 自定义picker选择器弹窗内容+textarea穿透bug
微信小程序中定义好的几种picker选择器,不管是日期选择器还是地区选择器,或是其他的都只有定死的样式和内容. 但是大多数开发程序的情况下还是需要自己写样式的,或是内容的. 例如: 代码如下: < ...
- Flutter 底部的renderflex溢出
一开始直接使用Scaffold布局,body:new Column 然后模拟器会提示捕获异常: 然后百度了一下Flutter的溢出问题,发现解决办法是使用SingleChildScrollView包 ...
- 当微信小程序遇到AR(四)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...