
双连通分量
d
四月不知秋
一个没有对象的野指针qaq
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ1515Street Direction(无向图改有向图)
POJ1515Street Direction(无向图改有向图)题意:把尽可能多的无向边改成有向边,使得图依然为强连通图思路:首先桥必是无向边,不能变。桥左右连接的是强连通分量,对每个强连通分量跑dfs,确定每条边的放方向#include<iostream>#include<cstring>#define N 100001#define LL long longusing namespace std;struct Edge{ int from,to,nex原创 2021-05-12 12:53:41 · 563 阅读 · 0 评论 -
2 - SAT 建边
建边1.我们利用一条有向边<i,j>,来表示选i的情况下,一定要选j;2.用i表示某个点是true,那么i’表示某个点是false3.因为限制的两两之间的关系,所以我们可以通过逻辑关系来建边:1)如果给出A和B的限制关系,A和B必须一起选,(A and B)||(!A and !B )==true 那么选A必须选B,建边<i,j>和<j,i>还有<i’,j’>和<j’,i’>2)如果给出A和B的限制关系,选A不能选B,那么(A &原创 2020-11-29 22:23:19 · 212 阅读 · 0 评论 -
2 - SAT + 二分
飞机着落思路二分枚举出时间间隔T,枚举两架飞机的时间间隔,跑2-SAT看是否符合条件,若符合条件则为什么要连小于T的边???#include<bits/stdc++.h>using namespace std;const int maxn=2e4+5;int n,a[3000][2];int dfn[maxn],low[maxn],stk[maxn],vis[maxn],color[maxn],cnt,num,top,r;vector<int>gap[maxn];原创 2020-11-29 16:40:37 · 126 阅读 · 0 评论 -
POJ3683:Priest John‘s Busiest Day(2-SAT)
POJ3683:Priest John’s Busiest Day(2-SAT)题意:某一天结婚的人特别多但是主持婚礼的神父只有一个。婚礼时间从s开始到e结束,神父必须在s到s+d或者e-d到e这段时间内在。给定了n个婚礼的s,e,d,求一种方案能使得神父主持所有的婚礼。思路:共n个婚礼,每个婚礼有两种选择。因为有相互影响,所以可以枚举两次婚礼的两次时间进行建边。输出方案时,因为tarjan求的是逆拓扑序,编号小的拓扑序大。我们需要选择对于每次婚礼的两种情况中拓扑序小的。#include<i原创 2021-05-11 20:29:44 · 120 阅读 · 0 评论 -
连通图学习笔记
连通图无向图和有向图的区别无向图任意两点都相互能到达有向图强连通图: 任意两点都能相互到达弱连通图: 基图是连通图点双连通: 删掉一个点之后,图仍联通边双连通: 删掉一条边之后,图仍联通性质:如果有桥,这个图必有割点,如果有割点,不一定会有桥总结:若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图。双连通分量双连通分量分为边双连通分量和点双连通分量两种边双连通分量概念: 在分量内的任意两个点总可以找到两条边不相同原创 2021-05-11 14:51:17 · 690 阅读 · 0 评论 -
二分图染色 + 点双连通分量
洛谷 SP2878 KNIGHTS - Knights of the Round Table题意:有n个骑士开会,每次开会的骑士们需满足:1,相互憎恨的骑士不能坐在圆桌的相邻位置 2,每次圆桌会议至少有3个骑士参加 3,每次开会的人数必须是奇数 。问:有多少个骑士不可能参加任何一次会议。思路:将互相无憎恨的骑士连边,找图中的简单环,用二分染色法判断其是否为一个二分图。我们在tarjan时,存下每个点双连通分量所有的点,再枚举每个点双连通分量进行二分染色。最后没有被染色过的骑士为不可能参加会议的原创 2020-11-25 19:17:52 · 165 阅读 · 0 评论 -
割点 + 存点双连通分量
洛谷 井下矿工 SP16185 BUSINESS - Mining your own business题意在一个无向图上选择尽量少的点涂黑,使得删除任意一个点后,每个连通分量里都至少有一个黑点思路点双连通分量 ( V-DCC ) ,在 Tarjan 时可以用数组记录一个点双连通分量所有的点,注意一个点可能在几个双连通分量中。特判,如果每个点双连通分量只有一个割点,则进行运算;否则跳过,如图#include <bits/stdc++.h>using namespace std;con原创 2020-11-24 17:54:15 · 144 阅读 · 0 评论 -
缩点+LCA(倍增)//
逃不掉的路法一:缩点tarjan,LCA(倍增)树上两点距离 = deep( x )+deep( y )-2 * deep(LCA( x, y ))法二:求桥,然后dfs染色即可,至于缩点就是枚举每条边然后新建图。#include <bits/stdc++.h>using namespace std;const long long inf=0x3f3f3f3f;const long long maxn=2e5+5;int head[maxn<<1],q,a[maxn]原创 2020-11-06 17:11:58 · 187 阅读 · 0 评论 -
双连通分量
洛谷P2860 [USACO06JAN]Redundant Paths G边双连通分量定义:没有割边(删除任意一条边对图得连通性没有影响)扩展:图上任何两个点都有两种及以上不同路径互相到达板子题题意:缩点后的图是一棵树,在树中最少增加几条边,可以使树变为边双连通分量公式:增加边数 = (树中度为1的节点数 + 1)/ 2#include<bits/stdc++.h> using namespace std;const long long inf=0x3f3f3f3f;cons原创 2020-11-05 16:51:23 · 211 阅读 · 0 评论