【无聊放个模板系列】洛谷 负环 模板

还有这样ws卡bfs-spfa判负环的也是醉

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<cmath>
 8 #include<stack>
 9 using namespace std;
10 #define Maxn 200010
11
12 struct node
13 {
14     int x,y,c,next;
15 }t[Maxn*2];int len;
16 int first[Maxn];
17
18 void ins(int x,int y,int c)
19 {
20     t[++len].x=x;t[len].y=y;t[len].c=c;
21     t[len].next=first[x];first[x]=len;
22 }
23
24 int dis[Maxn];
25 bool vis[Maxn],ok;
26
27 bool dfspfa(int x)
28 {
29     vis[x]=1;
30     for(int i=first[x];i;i=t[i].next)
31     {
32         int y=t[i].y;
33         if(dis[y]>dis[x]+t[i].c)
34         {
35             dis[y]=dis[x]+t[i].c;
36             if(vis[y])
37             {
38                 ok=1;
39                 return 1;
40             }
41             if(dfspfa(y)) return 1;
42         }
43     }
44     vis[x]=0;
45     return 0;
46 }
47
48 int main()
49 {
50     int T;
51     scanf("%d",&T);
52     while(T--)
53     {
54         int n,m;
55         scanf("%d%d",&n,&m);
56         len=0;
57         memset(first,0,sizeof(first));
58         for(int i=1;i<=m;i++)
59         {
60             int x,y,c;
61             scanf("%d%d%d",&x,&y,&c);
62             if(c>=0) ins(x,y,c),ins(y,x,c);
63             else ins(x,y,c);
64         }
65         ok=0;
66         memset(dis,0,sizeof(dis));
67         memset(vis,0,sizeof(vis));
68         for(int i=1;i<=n;i++)
69         {
70             dfspfa(i);
71             if(ok) {printf("YE5\n");break;}
72         }
73         if(!ok) printf("N0\n");
74     }
75     return 0;
76 }

判负环

2016-11-18 11:06:25

时间: 2024-09-30 16:29:49

【无聊放个模板系列】洛谷 负环 模板的相关文章

【三分模板】洛谷P3382三分模板

题目描述 如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减.试求出x的值. 输入输出格式 输入格式: 第一行一次包含一个正整数N和两个实数l.r,含义如题目描述所示. 第二行包含N+1个实数,从高到低依次表示该N次函数各项的系数. 输出格式: 输出为一行,包含一个实数,即为x的值.四舍五入保留5位小数. 输入输出样例 输入样例#1: 3 -0.9981 0.5 1 -3 -3 1 输出样例#1: -0.41421 说明 时空限制:50ms,12

洛谷P3385 【模板】负环 DFS-SPFA 判负环 图论

洛谷P3385 [模板]负环 图论 今天get了 一个 DFS-SPFA 判负环的方法 一般的 BFS-SPFA 判负环 一般就是 不停地做,如果某点第 n+1次加入队列中,那么说明这个图存在负环然而我并不会证明,期望复杂度是 O(kM) k 大约是在 2 左右 但是其实对于一些极限数据,最坏可以把他卡到 O( NM) 额,这就直接炸飞了是不是,而且据说,一些数据比较强的题目,总会想到卡一卡SPFA的, 然后我们换一种思路 因为题目中一定存在一种 负环对吧,所以说假如你某段路径权值和为自然数的时

洛谷—— P3385 【模板】负环

题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M,表示图有N个顶点,M条边 接下来M行,每行三个整数a b w,表示a->b有一条权值为w的边(若w<0则为单向,否则双向) 输出格式: 共T行.对于每组数据,存在负环则输出一行"YE5"(不含引号),否则输出一行"N0"(不含引号). 输入输出样例 输入样例#1: 2 3 4 1

洛谷 P3380 【模板】二逼平衡树(树套树)

洛谷 P3380 [模板]二逼平衡树(树套树) 线段树套treap: 就是线段树每个节点放一个treap.建树复杂度应该是$n log n$,操作1,3,4,5的复杂度是$(log n)^2$,操作2的复杂度是$(log n)^3$. 操作3:找到线段树的对应叶子节点后找到要删除的值,在回溯的时候更新线段树相关的每一个节点(在treap中去掉要删除的值,再加入要加入的值) 操作1:将操作转化为统计(这个区间[l,r]内小于x的数的个数)+1.那么通过线段树将区间分解,然后对分解出的每一个区间对应

洛谷P3387 【模板】缩点

洛谷P3387 [模板]缩点 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 输入输出格式 输入格式: 第一行,n,m 第二行,n个整数,依次代表点权 第三至m+2行,每行两个整数u,v,表示u->v有一条有向边 输出格式: 共一行,最大的点权之和. 输入输出样例 输入样例#1: 2 2 1 1 1 2 2 1 输出样例#1: 2 说

【洛谷P3385】模板-负环

这道题普通的bfs spfa或者ballen ford会T 所以我们使用dfs spfa 原因在于,bfs sfpa中每个节点的入队次数不定,退出操作不及时,而dfs则不会 既然,我们需要找负环,那么我们不妨将dis数组初始化为0,以每个点为起点进行dfs spfa 这样第一次扩展到的只有边权为负的边,之后若再次走到以访问过的点一定是负权回路 记得每次更换起点时清零vis数组 1 #include<cstdio> 2 #include<cstring> 3 #include<

洛谷P3372 【模板】线段树 1

P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷评测机出问题了吗? 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接

洛谷 P3375 【模板】KMP字符串匹配 || HDU 1686 Oulipo || kmp

HDU-1686 P3375 kmp介绍: http://www.cnblogs.com/SYCstudio/p/7194315.html http://blog.chinaunix.net/uid-8735300-id-2017161.html(mp&kmp) http://www-igm.univ-mlv.fr/~lecroq/string/node8.html(mp&kmp,看上去很正确的例程) http://blog.csdn.net/joylnwang/article/detai

网络流最大流模板(洛谷3376)——Dinic

小道消息,据说NOIP 2017 的六个题是三位(前?)国家队大神出的,所以难度很有可能贼高,并且可能出现网络流,所以慌慌张张地来打了个Dinic 模板,但愿汝佳所说“在大多数比赛中已经完全够用了”是对的. 1 #include<queue> 2 #include<vector> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstring> 6 #include<cstdlib