图论---强连通分量
pengwill97
C.S Master
展开
-
Vijos1022 Victoria的舞会2 (Tarjan强连通分量)
题意分析 裸题,输出scc的个数 代码总览 #include <bits/stdc++.h> using namespace std; const int nmax = 1e5 +10; const int INF = 0x3f3f3f3f; int low[nmax]; int dfn[nmax]; int sstack[nmax]; int head[nmax]; i...原创 2018-05-02 22:36:28 · 174 阅读 · 0 评论 -
BZOJ1051 [HAOI2006]受欢迎的牛(Tarjan求强连通分量)
题意分析 首先我们用Tarjan算法对强连通分量进行缩点,缩点其实就是对每个强连通分量进行染色,求得他们每个节点的染色编号。 这道题其实不用重新建图,原因在于,对于缩完点后的图,题目要求统计,其实就是所有的点都能够走到的点其对应强连通分量中点的个数。 然而关键就在于如何算出所有点都能走到呢,答案也很简单,这个点的出度一定为0。 那么是否有可能多个点出度为0呢,也是有可能的,但是这就不符合题...原创 2018-05-02 22:44:14 · 141 阅读 · 0 评论 -
Codevs 4093 EZ的间谍网络 (Tarjan求强连通分量)
题意分析 首先分析,题目中可能出现一群间谍处于一个强连通分量中。也就是说,间谍了解到的信息成一个强连通分量,我们只要掌握其中的一个间谍,就可以在知道这个强连通分量中的所有间谍信息。这样的话,获得这个强连通分量的最小代价,就是其中最小的间谍了。 所以,为了处理这样的强连通分量,首先用tarjan进行缩点。 然后我们考虑不能获得全部间谍信息的情况。 也就是说存在一个间谍的信息不能被获取。 什么...原创 2018-05-03 22:10:49 · 185 阅读 · 0 评论 -
【练习】HDU 1269 迷宫城堡 (强连通分量/并查集)
题意 给出nnn个点mmm条有向边,判断整张图是否为一个强连通分量。 题解 Tarjan或并查集维护即可。 代码 #include <bits/stdc++.h> using namespace std; const int nmax = 1e5 +10; const int INF = 0x3f3f3f3f; int low[nmax]; int dfn[nma...原创 2018-08-02 14:34:57 · 204 阅读 · 0 评论 -
【练习】HDU 2767 Proving Equivalences(强连通分量)
题意 给出一张有向图,求加入几条边后,原图变为一个强连通分量。 题解 首先求一下原图强连通分量个数,若为1答案则为0,否则对原图染色(缩点)。统计不同色块之间的入度和出度,答案为max(入度为0的色块数目,出度为0的色苦数目)。 因为对于每个出度为0的色块,为了组成强连通,每个色块必须要有一条出边,对于出度为0同理,所以答案为其中的最大值。 代码 #include<bit...原创 2018-08-02 23:32:06 · 167 阅读 · 0 评论 -
【练习】HDU 3836 Equivalent Sets (强连通分量)
题意 同HDU 2767 题解 同HDU 2767 代码 #include<bits/stdc++.h> using namespace std; typedef double db; typedef long long ll; typedef unsigned long long ull; const int nmax = 1e6+7; const int IN...原创 2018-08-03 11:31:47 · 151 阅读 · 0 评论 -
【练习】HDU 1827 Summer Holiday (强连通分量+缩点)
题意 给定N个人,M条关系(N <=1000, M<= 2000),,如果a到b有边则表示第a个人能够联系到第b个人,联系第i个人的花费为v[i],联系具有传递性。现在需要联系到所有人,求最小联系人数和最小花费。 题解 考虑使用tarjan算法求解出所有强连通分量,然后强连通分量缩点(染色),然后考虑最小花费。自然想到如果一个部分(点)没有人指向它,那么一定要通知他,也就对应...原创 2018-08-03 13:49:07 · 205 阅读 · 0 评论 -
【算法练习】HihoCoder 1185 连通性·三 (强连通分量)
题意 从1为起点,找到一条有向路径,其经过节点和最大。 题解 tarjan算法缩点,形成有DAG,在DAG上DP即可, 代码 #include<bits/stdc++.h> using namespace std; typedef double db; typedef long long ll; typedef unsigned long long ull; co...原创 2018-08-22 21:42:37 · 128 阅读 · 0 评论 -
【算法练习】Uva11324 The Largest Clique (强连通分量+DP)
题意 给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以)。 题解 强连通分量缩点后DP 代码 #include<bits/stdc++.h> using namespace std; typedef double db; typedef long long ll...原创 2018-08-23 14:40:34 · 240 阅读 · 0 评论