图论-----------连通分量
SingleK
这个作者很懒,什么都没留下…
展开
-
无向图的割点和桥(模板)
求无向图的割点和桥的模板,大白书312页内容,用邻接表存储,为dfs添加时间戳这个概念,同时递归计算low函数的值 模板如下 int dfs(int u, int fa) { int lowu = pre[u] = ++dfs_clock; int child = 0;//子节点个数 for (int i = 0; i < g[u].size(); ++i) {原创 2018-01-31 17:51:36 · 292 阅读 · 0 评论 -
无向图的点-双联通分量(模板)
求一个无向图的点双联通分量,大白书315页 性质:不同的点-双联通分量之间最多只有一个公共点,且它一定是割顶,反过来说任何割顶都至少是两个不同的点-双连通分量的公共点 模板 int n, m; int dfs_clock, bcc_cnt;//bcc_cnt记录点-双连通分量的个数,初始化是0但是是从1开始的 int pre[maxn], low[maxn], bccno[maxn];//b原创 2018-01-31 20:43:58 · 185 阅读 · 0 评论 -
Uvalive 3523 - Knights of the Round Table (双连通分量+二分图)
题目链接 https://vjudge.net/problem/UVALive-3523 【题意】 有n个骑士经常举行圆桌会议,每次圆桌会议应至少有3个人参加且人数必须是奇数,相互憎恨的骑士不能坐在圆桌上的相邻位置,在知道了哪些骑士互相憎恨后,要求出有多少个骑士不能参加任何一次会议 【思路】 大白书316页例题,以骑士为结点,两个骑士可以相邻(不憎恨)为边建立无向图,问题转换为求不在任何一...原创 2018-02-01 13:24:53 · 256 阅读 · 0 评论 -
Uvalive 5135 - Mining Your Own Business(双连通分量)
题目链接 https://vjudge.net/problem/UVALive-5135 【题意】 有一座地下的稀有金属矿由n条隧道和一些连接点组成,每条隧道连接两个连接点,任意两个连接点之间最多只有一条隧道。为了降低矿工的危险,你的任务是在一些连接点处安装太平井,使得在任意一个连接点倒塌时,不在此连接点的矿工能安全逃生(坍塌的连接点和相应边不能通行),为了节约成本,你应当尽量少地安装太平井,...原创 2018-02-01 15:40:41 · 346 阅读 · 1 评论 -
Uvalive 4287 - Proving Equivalences(强联通分量)
题目链接 https://vjudge.net/problem/UVALive-4287 【题意】 在数学中,我们常常需要完成若干个命题的等价性证明,比如4个命题a,b,c,d.我们证明a<->b,b<->c,c<->d,每次证明都是双向的,因此一共完成了6次推导。另外一种证明方法是a->b,b->c,c->d,d->a,只需4次。现...原创 2018-02-01 16:36:33 · 192 阅读 · 0 评论 -
Uva 11324 - The Largest Clique(强连通分量+DP)
题目链接 https://vjudge.net/problem/UVA-11324 【题意】 给定一张无向图G,求一个结点数最大的结点子集,使该子集中任意两结点u,v满足要么从u出发可达v,要么从v出发可达u,互相可达也是可以。 【思路】 大白书323页例题,先找出原图的各个强连通分量,然后把每个强连通分量缩为一点,同时权值为该区域所包含结点的个数,得到一个DAG,那么问题就转换为了求这个...原创 2018-02-01 19:53:49 · 269 阅读 · 0 评论 -
Uva 247 - Calling Circles(传递闭包 / 强连通分量)
题目链接 https://vjudge.net/problem/UVA-247 【题意】 如果两个人直接或间接互相打电话,则说明他们在同一个电话圈里。例如a打给b,b打给c,c打给d,d打给a,则这4个人在同一个圈里;如果e打给f,但是f不能打回给e,那么e,f就不在一个电话圈里,输入n(n<=25)个人和m次电话,找出所有的电话圈,人名是小写字母且不超过25个字符,不会有重名的情况。 ...原创 2018-02-03 19:39:55 · 362 阅读 · 0 评论 -
有向图的强连通分量(Tarjan算法模板)
求有向图的强连通分量,Tarjan算法,大白书321页。lowlink[u]为u及其后代能追溯到最早祖先点v的pre[v]值,递归计算lowlink. 模板 int dfs_clock, scc_cnt;//scc_cnt记录强连通分量的个数,初始化是0但是是从1开始的 int pre[maxn], lowlink[maxn], sccno[maxn];;//sccno[u]记录点u属于第...原创 2018-01-31 21:51:31 · 444 阅读 · 0 评论 -
51Nod 1076 - 2条不相交的路径(边双连通分量-模板)
#include <bits/stdc++.h> using namespace std; const int maxn=100005; vector<int> g[maxn]; bool is_cut[maxn]; int n,m,ans=0;//节点编号从1开始 int vis[maxn];//vis[u]记录u的边双连通分量的编号,从1开始 int low[maxn...原创 2019-02-17 21:18:46 · 311 阅读 · 0 评论