![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tarjan
~无相~
这个作者很懒,什么都没留下…
展开
-
Acwing395. 冗余路径(双连通分量+tarjan缩点)
题目为了从F个草场中的一个走到另一个,奶牛们有时不得不路过一些她们讨厌的可怕的树。奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分离的路径,这样她们就有多一些选择。每对草场之间已经有至少一条路径。给出所有R条双向路的描述,每条路连接了两个不同的草场,请计算最少的新建道路的数量,路径由若干道路首尾相连而成。两条路径相互分离,是指两条路径没有一条重合的道路。但是,两条分离的路径上可以有一些相同的草场。对于同一对草场之间,可能已经有两条不同的道路,你也可以在原创 2020-09-23 15:05:45 · 115 阅读 · 0 评论 -
双连通分量+tarjan缩点模板
taijan视频讲解代码#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 5010, M = 20010;int n, m;int h[N], e[M], ne[M], idx;int dfn[N], low[N], timestamp;int stk[N], top;int id[N], dcc_cnt;boo原创 2020-09-23 15:07:30 · 139 阅读 · 0 评论 -
Acwing1183. 电力(求无向图删除一个点后连通块最大个数:tarjan割点)
题目给定一个由 n 个点 m 条边构成的无向图,请你求出该图删除一个点之后,连通块最多有多少。输入格式输入包含多组数据。每组数据第一行包含两个整数 n,m。接下来 m 行,每行包含两个整数 a,b,表示 a,b 两点之间有边连接。数据保证无重边。点的编号从 0 到 n−1。读入以一行 0 0 结束。输出格式每组数据输出一个结果,占一行,表示连通块的最大数量。数据范围1≤n≤10000,0≤m≤15000,0≤a,b<n输入样例:3 30 10 22 14 20原创 2020-09-23 15:37:31 · 884 阅读 · 0 评论 -
Checkposts
思路先用tarjan把求出所有强连通分量,并记录每一个强连通分量的最小值,和最小值的个数,最后答案就出来了代码#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <stack>using namespace std;typedef long long ll;const int N = 100010, M = 30原创 2020-08-17 11:46:35 · 143 阅读 · 0 评论 -
AcWing 1175. 最大半连通子图
思路1.先利用tarjan把所有强连通分量算出来,将图变为一个有向无环图2.对这个有向无环图建图,并且除去重边3.对于一个有向无环图可以用dp的方式f[i]表示的是以i点为终点的最大连通子图的点的个数,g[i]表示这种情况的方案数4.接下来就是枚举一下所有有向无环图的点,对于每一个点枚举边,进行dp,最后求f最大值即可代码#include <cstdio>#include <cstring>#include <iostream>#include &l原创 2020-08-01 09:55:27 · 175 阅读 · 0 评论 -
AcWing 367. 学校网络
思路1:首先把这个图通过tarjan转化为一个有向无环图2:把每一个强连通分量看作一个点,那么第一问求最少要放几个学校很明显就是其中入度为0的强连通分量代表的点的个数,第二问:几条线可以让所有点成为强连通图,结论是max(入度为0的点个数,出度为0的点的个数)3:证明:假设入度为0的点个数为P,出度点个数为Q,①:假设P<=Q,如果P==1,那么只要把每一个出度为0的点连到这个入度为0的点即可,如果P>=2,那么Q>=2,那么如下图连线即可代码#include &l原创 2020-08-01 09:27:01 · 154 阅读 · 0 评论 -
Acwing1174. 受欢迎的牛
思路如果对于一个有向无环图判断一个点是否可以被全部点走到,只要判断一下是否只有一个出度为0的点即可,那么这题只要把这个图转化为有向无环图即可,这一步可以用tarjan,把所有的强连通分量找出来,那么把一个强连通分量当作一个点,这样必然就是一个有向无环图,接下来判断一下是否只有一个出度为0的点,那么答案就是这个点代表的强连通分量内点的个数。代码#include <cstdio>#include <cstring>#include <iostream>#inc原创 2020-08-01 08:27:13 · 108 阅读 · 0 评论