tarjan
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
luogu1262 间谍网络(tarjan缩点)
tarjan缩点,就是用来把一个有向带环图变成DAG即 Directed Acyclic Graph有向无环图的算法,复杂度为O(E+V)。dfn[i]是dfs序,low[i]是i及i的子树中最小的dfn。belong[x]是点x在新图中所属的点。原创 2017-09-13 21:30:11 · 135 阅读 · 0 评论 -
bzoj1194 [HNOI2006]潘多拉的盒子(自动机+bfs+tarjan+拓扑序dp)
我们枚举每一对自动机A,B,看A能识别的所有串能否被B全都识别。如果能就建边A->B.那么我们tarjan缩点+拓扑序dp求最长链即可。 考虑如何判断能否全都识别:bfs,同时扩展两个自动机,如果某一个串在A自动机走到了结束节点而B自动机不是结束节点,那么就不能全部识别。以A,B自动机分别匹配到了哪个节点为状态,不重复搜,复杂度就是O(n2)O(n^2)的 因此总的复杂度就是O(S2n2)O(S原创 2018-04-23 09:50:12 · 221 阅读 · 0 评论 -
poj3678 Katu Puzzle(2-sat)
每个点不是0就是1,要满足一些限制,很2-sat。 根据每种运算限制来建图即可。 这里有一些不同于前面几道题的情况,那就是有了类似xi=1这种只有一个元素的限制。 对于这种限制我们怎么办呢?我们让他们去自相矛盾,即如果x必须=1,建边(x0->x1),这样就不可能让x=0了。这样之后好像就不太满足对称性了,为什么还是可以缩点去做呢?因为爱情!(划去),自己去画图理解下吧。。。#include原创 2018-04-13 11:45:45 · 179 阅读 · 0 评论 -
poj3648 Wedding(2-sat)
首先每个人一个标号,然后每个人分为0–和bride一侧 1–和groom一侧两个点。夫妻不能同侧,建边。有**的不能都是1,建边。然后规定groom必须为1,bride必须为0.我本来写对了,然而对着一个正确的程序调了半天【再见】原创 2018-04-13 15:22:04 · 174 阅读 · 0 评论 -
poj2723 Get Luffy Out(二分答案+2-sat)
二分答案,然后2-sat判定是否合法。原创 2018-04-13 16:04:48 · 165 阅读 · 0 评论 -
poj2749 Building roads(二分答案+2-sat)
求任意两点间最大距离最小。我们二分答案,每次用2-sat去判定是否可行。 三种限制: 1、i,j不能连同一个。 2、i,j必须连同一个 3、i连k1,j连k2就超了的话,这俩互斥。原创 2018-04-13 17:13:19 · 260 阅读 · 0 评论 -
bzoj1997 [Hnoi2010]Planar(平面图+2-sat)
平面图的一个性质:m<=3n-6. 因此我们可以把边数也变成O(n)级别的。 相当于给了我们一个环,然后若干条边,要么放在环内,要么放在环外。 如果相交则必须一内一外。 用2-sat判定即可。 复杂度O(Tn2)O(Tn^2)原创 2018-04-13 22:15:44 · 217 阅读 · 0 评论 -
bzoj2707 [SDOI2012]走迷宫(期望dp+tarjan缩点+Gauss)
令f[i]表示从i到T的期望步数。 我们有转移f[x]=∑yf[y]du[x]+1f[x]=∑yf[y]du[x]+1f[x]=\sum_y\frac{f[y]}{du[x]}+1 因为存在环所以scc内只能Gauss来求。 于是我们先tarjan缩一波点,然后倒拓扑序dp即可。 f[T]=0. 如果s,t不连通那么输出inf,或者缩完点之后没有出度的点不止bel[T],那么输出inf。...原创 2018-05-26 22:14:51 · 439 阅读 · 0 评论 -
bzoj3258 秘密任务(Dij+最小割+tarjan)
首先跑两边Dijkstra,只留下一定存在在最短路上的边。 然后把一条边拆成两条边,权值分别为起终点的权值。 现在我们就是要花最小的代价把1,n割开,于是求一个最小割。 还要判定最小割是否唯一。可以对残余网络tarjan缩点。 如果一条边是割边,那么需要满足: 1、满流边 2、bel[x]!=bel[y] 如果还满足bel[x]==bel[s]&&bel[y]==be...原创 2018-06-13 12:27:38 · 366 阅读 · 0 评论 -
luogu3388 tarjan求割点板子
讲得不错:传送门 byvoid真乃神人也。 大体就是看dfs搜索树,如果x是割点的话,无非两种情况: 1.x是根,且有两棵及以上的子树。x一去掉,它的每个子树就会自成一块。所以x是割点。 2.x是非根非叶子节点,若其子树的节点均没有指向x的祖先节点的回边,说明删除x之后,根结点与x的子树的节点不再连通;则节点x为割点。原创 2017-09-15 14:44:23 · 328 阅读 · 0 评论 -
bzoj1718 Redundant Paths(桥,tarjan边双缩点)
首先tarjan把边双都缩成一个点,这样我们就得到了一棵树。 如何把这棵树加最少的边变成边双呢?统计出树中度为1的节点的个数,即为叶节点的个数,记为leaf。则至少在树上添加(leaf+1)/2条边,就能使树达到边二连通,所以至少添加的边数就是(leaf+1)/2。具体方法为,首先把两个最近公共祖先最远的两个叶节点之间连接一条边,这样可以把这两个点到祖先的路径上所有点收缩到一起,因为一个形成...原创 2018-05-31 23:12:33 · 322 阅读 · 0 评论 -
poj2942 Knights of the Round Table(点双的性质+二分图染色)
首先我们建出补图,那么就是求这样的点的个数:不在任何一个>=3的奇环上。 我们搞出点双,如果点x,y不在一个点双内,那么他俩一定不在一个环上。 所以我们对每个点双分别讨论。 这里有一个结论:如果一个点双内存在一个奇环,那么这个点双内的每一个点都在一个奇环上。 大概口胡一下:对于一个点双,一定存在一个过所有点的简单环路。如果这个点双有奇数个点,则得证。 否则如果我们找到了一个奇环。点...原创 2018-06-01 16:54:46 · 238 阅读 · 0 评论 -
bzoj2574 [Poi1999]Store-Keeper(bfs+点双)
和bzoj5138基本一样qaq#include &lt;bits/stdc++.h&gt;using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 110inline int read(){ int x=0,f=1;char ch=getchar(); while(ch&lt;'0...原创 2018-05-31 22:26:32 · 678 阅读 · 0 评论 -
bzoj5138 [Usaco2017 Dec]Push a Box(bfs+点双)
推箱子owo 考虑bfs出所有可以到达的状态,O(1)回答询问。 用f[x][y][i]f[x][y][i]f[x][y][i]表示箱子在(x,y),人在箱子的i方向。(人不在箱子旁时没啥用,所以可以压缩状态) 两种决策: 1、推箱子,很好转移。 2、箱子不动,人换方向。需要判断两个点是否存在不经过箱子的路径。 可以提前求出所有的点双来快速判断。因为这两点一定至少连通,所以如果存在一个...原创 2018-05-31 22:16:49 · 452 阅读 · 0 评论 -
uoj30【CF Round #278】Tourists(圆方树+树链剖分+可删除堆)
求一般图两点之间所有简单路径上的点权的最小值。 我们搞出圆方树,原图两点间的所有简单路径的并就对应了圆方树上两点间路径。圆点权值为原点点权,方点权值为这个点双的权值最小值。 树链剖分维护路径最小值即可。但是这样修改一个点的点权时可能需要修改一堆方点,复杂度会爆炸。于是一个小trick,我们每个方点只维护儿子圆点的权值最小值。这样更改一 个点的权值时,只需要更改它的父亲方点一个即可。查...原创 2018-05-31 20:33:21 · 450 阅读 · 0 评论 -
bzoj2730 [HNOI2012]矿场搭建(点双)
先tarjan求一下所有的点双。 然后对于每一个点双,分类讨论: 1、只有一个割点,必须选一个非割点。 2、有&amp;gt;=2个割点,不用选 3、有0个割点,必须选俩。#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 510in...原创 2018-05-31 16:30:33 · 286 阅读 · 0 评论 -
poj1523 SPF(求割点及所在块个数)
一个割点所在块个数就是去掉这个点之后的连通块个数。 tarjan求割点并记录块数即可。 注意此题很坑,标号并不一定是连续的…#include &lt;cstdio&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;using namespace std;#define ll long long#define inf 0x3f...原创 2018-05-31 15:03:44 · 204 阅读 · 0 评论 -
bzoj1123 [POI2008]BLO(tarjan求割点)
把某个割点去掉以后,会出现几个连通块,它们之间不能互相到达即会分成上面一棵树,下面若干子树子树之间不互通,所有子树和上面那个树不互通,通过记录树的大小统计答案另外删去的点和其它点不互通。来自hzwer的题解原创 2017-09-15 15:07:36 · 374 阅读 · 0 评论 -
poj3683 Priest John's Busiest Day(2-sat)
2-sat,需要输出方案。我们tarjan缩点之后,建新图时建反图,方便我们倒着拓扑序。 我们从底往上走,如果这个点i还未被选择/删除,就选择i,删除i’(这里我认为只需删除i’,而不需要去dfs删i’的前代,因为i’的前代一定是i的后代,而i的后代后已经做完了)然后按顺序输出即可。原创 2018-04-13 10:34:38 · 418 阅读 · 0 评论 -
poj3207 Ikki's Story IV - Panda's Trick(2-sat)
枚举所有边对,如果会相交,就说明必须一个在内,一个在外,建图即可。 跑tarjan缩scc,如果一条边既必须在内又必须在外则无解,否则一定有解。原创 2018-04-13 08:53:30 · 158 阅读 · 0 评论 -
bzoj1051 [HAOI2006]受欢迎的牛(tarjan求强连通分量)
显然,一个强连通内的每头牛都互相欣赏,如果一个强连通内的牛欣赏牛a,则这个强连通内所有的牛都欣赏牛a,因此我们把这些牛都缩成一个点,重新建图,如果只有一个出度为0的点,说明其他强连通都能到这个强连通,输出这个强连通的大小就是答案。如果有多个出度为0的点,说明总会有牛彼此不欣赏,输出0.原创 2017-09-14 09:04:04 · 357 阅读 · 0 评论 -
CF427C Checkposts(tarjan求强连通)
每个强连通分量记最小值,及最小值的个数。原创 2017-09-14 09:42:50 · 562 阅读 · 0 评论 -
bzoj2208 [Jsoi2010]连通数(tarjan缩点+拓扑排序+bitset传递闭包)
首先用tarjan缩点,重建图,变成DAG,然后拓扑排序+bitset传递闭包。原创 2017-09-15 11:07:03 · 435 阅读 · 0 评论 -
bzoj1589 [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果(tarjan缩点+记忆化搜索)
先tarjan缩点,然后记忆化搜索。。每个点就一个出度,重建图后一个强连通若是大于1则不可能有出度。原创 2017-09-15 11:38:56 · 358 阅读 · 0 评论 -
bzoj1179 [Apio2009]Atm(tarjan缩点+spfa)
tarjan缩点之后不会有正权圈,跑spfa即可。原创 2017-09-15 13:16:42 · 348 阅读 · 0 评论 -
poj1236 Network of Schools(tarjan缩点)
强连通缩点重构图,入度为0的点的个数即为第一问的答案,第二问的答案为入度为0的点的个数和出度为0的点的个数的最大值。证明见百度。原创 2017-09-18 16:04:04 · 485 阅读 · 0 评论 -
bzoj2438 [中山市选2011]杀人游戏(tarjan缩点)
知道谁是杀手相当于知道所有人的身份。因此题目的答案即在有向图中选择最少的点,使得能遍历到至少n-1个点(最后一个点可以推理得到)。设结果为x,则答案为(n-x)/n。 tarjan求强连通缩点,每个强连通我们只需询问一个人即可。而且只询问那些入度为0的即可。特殊情况是有可能存在一个强连通大小为1,入度为0,且它是不必要的(也就是他指向的点的入度都大于1,即使不问他,也可以遍历到那些点),那我们可以原创 2017-09-18 17:05:16 · 513 阅读 · 0 评论 -
bzoj1924 [Sdoi2010]所驼门王的宝藏(tarjan缩点+拓扑排序+dp)
把每个点向它能到达的点连一条有向边,那么答案就是这个图的最长链。然后就是一个强连通分量缩点+拓扑排序dp求最长路的套路了。但是,边不能直接暴力连!比如 同一行可能会有好多横天门,然后 就爆掉了!!!其实如果一行有许多横天门,我们不需要对每个横天门都连许多边,因为同一行的横天门肯定是属于同一个强连通的,反正我们也要给他们缩点,所以我们只拿一个横天门出来做,让他去连边,对于同一行的横天门连双向边,其他门原创 2017-09-19 13:18:27 · 572 阅读 · 0 评论 -
bzoj2788 [Poi2012]Festival(差分约束+floyd+tarjan缩点)
首先根据差分约束建图,Floyd跑最短路,判断是否无解(f[i][i]<0说明有负环,无解,根据此题的特殊性质,判正环负环都一样。有负环必有正环。) 然后Tarjan缩点,显然不同强连通分量之间互不影响(就算两个scc链接了,也一定是通过边权为0的边,我们可以一个给极小值,一个给极大值,显然不影响结果。) 一个强连通分量内的最多取值个数等于两点间路径的最大值。(比如最大值是2,说明此scc中最原创 2017-10-04 22:30:02 · 340 阅读 · 0 评论 -
CF894E Ralph and Mushrooms(tarjan缩点+拓扑序dp+数学)
一个强连通内的边显然可以把它的价值完全压榨,其他的边只能过一次,所以我们tarjan求scc,缩成DAG,然后拓扑序dp求最长路。至于怎么算一条边的所有价值,数学搞吧。首先求出n∗(n+1)<=wn*(n+1)<=w的最大的n,然后价值就是n∗w−∑ni=1i∗(i+1)/2+wn*w-\sum_{i=1}^n i*(i+1)/2+w,也就是n∗w−n∗(n+1)∗(n+2)/6+wn*w-n*(n原创 2017-11-21 11:13:18 · 766 阅读 · 0 评论 -
CIA3 NOI接站(tarjan缩环+Floyd传递闭包+可相交最小路径覆盖)
可以发现,题目求得就是一个可相交最小路径覆盖,但是有环。所以我们先用tarjan把环都缩掉,然后Floyd传递闭包,求二分图最大匹配,答案就是scc-ans.原创 2017-12-11 08:12:12 · 328 阅读 · 0 评论 -
bzoj5017 [Snoi2017]炸弹(tarjan缩点+拓扑序dp+线段合并+线段树优化建图)
首先我们可以发现每个点能引爆的炸弹是一个连续的区间。相邻的点能引爆的区间肯定不会相离。每个点向他能引爆的点连边,建出一张有向图,Tarjan缩点(一个scc内的点都可以互达,合并他们能到达的区间即可),然后拓扑序倒序dp即可。转移相当于线段合并。每个点记录他最后能引爆的区间,答案就是区间大小。 可是我们最坏情况有O(n2)O(n^2)条边,无论是时间上还是空间上都是无法接受的。还好我们每个点能连向原创 2017-12-22 22:07:41 · 945 阅读 · 0 评论 -
bzoj2893 征服王(tarjan缩点+有上下界最小流/费用流)
限制起终点的可相交最小路径覆盖。首先tarjan缩一波点。然后就是个有上下界最小流,拆点,i->i+scc,容量为(1,inf)。其他边都是(0,inf)。 tips:这题蒟蒻有个不是很懂的地方,我的超级汇点T=2001时就会wa,改成2005就可以A了,是我的代码哪里写挂了吗?望神犇指教。或者可以用最大费用最大流,拆点,i->i+scc,容量为1,花费为1的一条边,再来一条容量为inf,花原创 2018-01-07 13:09:19 · 343 阅读 · 0 评论 -
bzoj1797 [Ahoi2009]最小割(最小割+tarjan缩点)
拖了一个世纪的题。嗯。 求最小割,问每一条边是否可能是割边,是否一定是割边。 我们先跑一遍dinic,然后对残余网络进行scc缩点。结论如下:1.如果(u,v)可能被割掉,则scc[u]!=scc[v] 2.如果(u,v)一定被割掉,则scc[u]=scc[S],scc[v]=scc[T]为什么呢?首先割边一定是满流边。 因为不满流的边一定不是割边,一定有更优的。这个想一想还是可以理解的。其原创 2018-02-20 22:20:18 · 347 阅读 · 0 评论 -
luogu3731 [HAOI2017]新型城市化(二分图+网络流+tarjan求scc)
我们把给定的边连成图,根据题目要求是一张二分图。这张图的补图的最大团就是原图的最大点独立集。因此我们就是要求删掉哪条边以后最大点独立集会变大。最大点独立集=点数-最小点覆盖集,而最小点覆盖集就是二分图的最大匹配。因此我们就是要求哪些边一定在最大匹配上。我们可以跑一遍网络流来求最大匹配,然后考虑对残余网络求scc。一条边一定出现在最大匹配中,当且仅当他是满流边且两端点不处于同一scc中。为什么呢?因为原创 2018-03-15 09:16:51 · 440 阅读 · 0 评论 -
poj1904 King‘s Quest(二分图+tarjan求scc)
给定一张二分图,以及一个完备匹配。问你对于X部的每个点,有哪些Y部的点是可以连的,使得还保证存在完备匹配。 如果我们要把x1->y2,则x2->yk,xk->y1才可以还存在完备匹配。 即x1->y2->x2->yk->xk->y1->x1。中间可以更替若干点,只要最后还能回到x1即可。 我们发现这样就成了一个环。于是我们可以对原边x->y,建边x->y,对给定的完备匹配x->y,建边y->x原创 2018-03-14 07:38:50 · 229 阅读 · 0 评论 -
bzoj1823 [JSOI2010]满汉全席(2-sat)
挺裸的2-sat原创 2018-04-15 19:02:31 · 231 阅读 · 0 评论 -
CF962F Simple Cycles Edges(图论+tarjan求点双)
给定一张无向图,求哪些边只在一个简单环中。我们搞出点双,然后对于一个点双,如果边数=点数,说明这个点双就是一个简单环,它的所有边都满足条件。否则一定都不满足条件。为什么不是边双呢?因为你看两个环,如果只有一个公共顶点,那么他的点数≠≠\not=边数,但是所有边都符合要求。也就是一个边双中可能有多个简单环链接起来而不存在一个过所有点的大环,但是点双中一定存在一个过所有点的大环。#incl...原创 2018-06-01 20:54:03 · 756 阅读 · 0 评论