强连通分量
huanzhizun
这个作者很懒,什么都没留下…
展开
-
强连通分量(tarjan算法)
#include #include #include #include #include #define max 110 using namespace std; int par[max],in[max],out[max]; int low[max],dnf[max],sta[max],ccount,tot,cnt;//ccount为强连通分量个数 bool use[max]; vectorg[m原创 2014-04-29 09:22:03 · 665 阅读 · 0 评论 -
poj 3683 Priest John's Busiest Day 2-SAT
建议读者先了解一下2-SAT,可以通过挑战程序设计竞赛那本书。 这道题就是两种情况,我们可以用a表示从开始进行,非a表示从结尾进行,这样我们暴力每两个活动,分别考虑这连个活动在开始或者结尾举行时是否能够同时存在,然后直接加边即可。 #include #include #include #include #include #define maxn 2105 using namespace std原创 2015-07-11 17:18:36 · 337 阅读 · 0 评论 -
poj 2186 Popular Cows 缩点
用强连通分量缩点之后,看一看出度为0的点有多少个,如果大于1个就输出0,否则输出这个点(连通分量里点的个数)。 #include #include #include #include #include #define maxn 11005 using namespace std; int low[maxn],dnf[maxn],que[maxn],tear,head[maxn],c[maxn],原创 2015-07-11 17:15:36 · 412 阅读 · 0 评论 -
poj 2723 Get Luffy Out 2-SAT
因为过一个门之后才能到下一个门,所以我们直接二分门数,对于每对钥匙a、b,a&b=0,所以a到n+b加边,b到n+a加边。而对于每个门对于的钥匙a、b两个必须存在一个,所以n+a到b,b+n到a加边即可。 #include #include #include #include #include #define maxn 4505 using namespace std; int low[maxn原创 2015-07-11 17:28:56 · 393 阅读 · 0 评论 -
poj 3180 The Cow Prom 强连通分量
直接求分量里元素大于1的分量个数即可。 #include #include #include #include #include #define maxn 11005 using namespace std; int low[maxn],dnf[maxn],que[maxn],tear,head[maxn],c[maxn],mark[maxn]; bool map[maxn][maxn]; ve原创 2015-07-11 17:24:54 · 416 阅读 · 0 评论 -
poj 2749 Building roads 2-SAT
同样我们二分距离,我们可以这样考虑,对每个仓库a用a表示到第一个结合点连边,非a到第二个转接点连边,接下来我们对于相互恨的和相互喜欢的可以直接加边,对于约束条件,我们暴力每两个仓库,判断这两个仓库分别连在两个转接点时是否可行,用2-SAT作为判断条件。 #include #include #include #include #include #include #define maxn 10105原创 2015-07-11 17:32:19 · 393 阅读 · 0 评论 -
poj 2763 Housewife Wind 树链剖分+LCA
对于每组询问,我们直接用logn的复杂度求出两个点的LCA,至于修改边以及查询长度则是树链剖分模板题。 #include #include #include #include #include #define maxn 100005 using namespace std; int top[maxn],fa[maxn],son[maxn],size[maxn],id[maxn],num,dep[原创 2015-07-11 17:22:42 · 379 阅读 · 0 评论 -
强连通分量(割点)
#include #include #include #include #define maxn 1005 using namespace std; int vis[maxn],low[maxn],dnf[maxn],yes[maxn],fa[maxn]; vector g[maxn]; int map[1005][1005]; void init(int n){ for(int i=1;原创 2014-09-05 08:13:42 · 517 阅读 · 0 评论 -
强连通分量(桥)
#include #include #include #include #define maxn 1005 using namespace std; int vis[maxn],low[maxn],dnf[maxn],yes[maxn],fa[maxn]; vector g[maxn]; int map[1005][1005]; void init(int n){ for(int i=1;原创 2014-09-05 08:12:28 · 466 阅读 · 0 评论 -
poj 3678 Katu Puzzle 2-SAT
模板2-SAT,至于and之后是1以及or之后是0的情况,如果a&b=1,那么a=1且b=1,a=1则可以用非a到a连一条边即可。 #include #include #include #include #define maxn 100005 using namespace std; int low[maxn],dnf[maxn],que[maxn],tear,head[maxn],head1[原创 2015-07-11 17:26:36 · 373 阅读 · 0 评论