强连通/割边/割点
「已注销」
这个作者很懒,什么都没留下…
展开
-
POJ 1144 Network (割点)
思路:模版似的tarjan求割点。 注意本题输入很坑。。根本没必要这么搞啊。。 (我一开始读的char,被坑死,后来换了一种别人的写法就OK了)#include <cstdio>#include <iostream>#include <string.h>#include <algorithm>using namespace std;const int maxn = 110;int m原创 2017-07-14 20:47:12 · 99 阅读 · 0 评论 -
HDU 4738 Caocao's Bridges (割边)
坑点:一开始就是不连通的时候,不需要去炸桥,所以是0.如果是联通,并且最小的桥的权值为0,那么至少也得派一个人去炸。。。注意判断边的次数。#include <cstdio>#include <iostream>#include <string.h>#include <algorithm>using namespace std;const int maxn = 1100;struct原创 2017-07-15 10:24:48 · 242 阅读 · 0 评论 -
POJ - 3678 Katu Puzzle (2-SAT)
思路:2-SAT模板题,注意建边。 假设有点 i1 , j1, i2, j2 当只能选 i1 和 j1 点时,这样加边: addedge(i1,j1),addedge(j1,i1); addedge(i2,i1),addedge(j2,j1);//构造这组边为了使选i2,j2非法,因为只能选i1和j1#include <iostream>#include <algorithm>#incl原创 2017-07-15 19:30:16 · 119 阅读 · 0 评论 -
HDU 3671 Boonie and Clyde (tarjan+割点变形)
思路:此题不是一般的求割点,而是求去掉一对点之后能否让图分开,即割点对(我这造词能力,满分)对于第一个点我们只能枚举,但是对于第二点却不必暴力枚举考虑经过删减第一个点之后的图,如果删去这个点之后剩下了一个部分,那么我们对这张图tarjan求割点,然后加入结果就好了。如果剩下了2个部分,那么考虑这两个部分中的点的个数,如果两个部分中的点都是1个,那么对结果没有贡献。如果只有一个部分是1个点,那么原创 2017-04-30 14:10:04 · 486 阅读 · 0 评论 -
POJ 2186 popular cows (tarjan + 缩点)
思路:有向图,边具有传递性。我们要找的是这样的点:这个点被其他所有的点所直接或传递指向,即这个点是所有牛所崇拜的。通过对数据的观察,直接否决了暴力的可能性。因为要暴力传递性,所以至少要 n3n^3 的复杂度。首先我们考虑图中存在的强联通分量,对于强联通分量中的点,每个点都能通过传递性到达此联通分量中的任何一点,即可以将这个强联通分量视为一个点(缩点),而这个点的出边即连向其他的缩点。考虑经原创 2017-04-29 22:26:57 · 87 阅读 · 0 评论 -
HDU 1269 迷宫城堡(tarjan强联通分量)
思路:tarjan求强联通分量个数代码:#include <iostream>#include <cstdio>#include <algorithm>#include <string.h>using namespace std;int ans;//代表着强联通分量的个数//链式前向星const int maxn = 10010;//最大的点的个数int head[maxn];stru原创 2017-04-29 19:04:47 · 264 阅读 · 0 评论 -
HDU 6038 Function (强连通+计数)
思路:看似是数学题。。其实是图论。 我们可以发现他给的函数的约束关系其实是一种递推推导。 对于样例 3 2 1 0 2 0 1 我们把a行的第i个(i从0开始)建一条从i到 aia_i 的边,那么对于这个样例我们得到了一个二元环和一个一元环,对b行进行相应的操作,我们得到了两个一元环。(我这里的二元环即代表由两个元素组成的环)这个环是什么意思呢?她代表了一种相互递推的关系,只要在环中的任原创 2017-07-25 21:36:22 · 939 阅读 · 0 评论 -
HDU 6073 Matching In Multiplication(强连通+拓扑)
思路:先找右边节点入度为1的点,设为b,所以这个点练的边一定做出了贡献。然后找左边连这个点b的点a。 将a所连的点的入度都减减,如果出现入度为1的,那么接着从这个点搜。 直到没有这样的点。 所以剩下的点都在环里。 跑一边tarjan,然后在各自的联通分量内跑一圈,注意:环的贡献由两部分组成,因为是选一条边不选一条边,所以反过来就又有一种。#include<stdio.h>#include<原创 2017-08-03 19:38:19 · 220 阅读 · 0 评论