![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
连通分量及其应用
文章平均质量分 82
qte_acm
这个作者很懒,什么都没留下…
展开
-
poj 3694 中等难度的双…
题意:给出一个连通图 , 并且给出Q条边 , 问每添加一条边之后 , 图中还剩下多少条桥?解法:我们先把原图中的所有边-双连通分量 , 全部都缩成一个点 , 那么形成的一个新图就是一颗树了 ,在新图中任意两个点之间只有一条路径(边不重复) , 每当我们添加一条新的边的时候 , 我们就用dfs来找到这条路径 ,并且标记着条路径, 那么就等于这条路径上的所有边都不再是桥了 , 我们用总的桥的数原创 2013-12-14 20:05:49 · 528 阅读 · 0 评论 -
求强连通分量几种算法的比较
对于求有向图的强连通分量 , 我常用的一般只有这三种算法Kosaraju、Tarjan、Garbow,而这三种算法 ,Tarjan和Garbow算法的思想是一样的 , 只不过是实现的方法不一样 , 下面就逐一分析这三个算法:1、Kosaraju Kosaraju算法主要是利用有向图中原图和其反图之间的关系, 对于一个原图中的强连通分量 , 其在反图中还是强连通分量 , 原图中存在u原创 2013-12-14 20:06:06 · 847 阅读 · 0 评论 -
hdu 3313 求两点…
给出一个有向图 , 点数n <= 100000 , 边数m <=300000 , 求 s 到 t之间的割点?解法:先求出s 到 t之间的最短路径 , 我们可以确定 , s 到 t之间的所有割点 , 肯定包含在这条最短路径上 ,我们再判断这条最短路径上的所有点 , 是不是割点。判断点是不是割点时 , 我们只需要判断这个点是不是可以从其他路径到达 , 那么我们就能用bfs , 从s开始遍历原创 2013-12-14 20:06:39 · 598 阅读 · 0 评论 -
强连通分量scc
给出一个有向图 , 要求这个图中的所有强连通分量 (一个单独的点也是强连通分量 , 这点和无向图的双连通分量不同 ,他是一条边就是双连通分量)这里延伸出一个题目 , 给出一个有向图 , 请问最小需要连接多少边才能让这个图变成强连通图 。解法:先把图中的强连通分量都求出来 , 然后再把每个强连通分量缩成一个点 , 就能得到一个DAG图 , 然后最小值 = max(a ,b) , a表示入度原创 2013-12-14 20:03:44 · 713 阅读 · 0 评论 -
poj 3352
这是一题求边—双连通的题目 , 题目给出一个无向图 , 问最少还需要多少边 , 才能让这个图变成边—双连通图 。解法:1、 先求出所有桥 ,然后再用dfs去遍历图,且不能经过桥, 这样就能把图中的所有边连通分量求出2、让后再把所有边连通分量缩成一个点 , 用桥去连接这些点 , 最小边 = (a + b*2 + 1)/2 , a表示新构成的图中度为1的点 , b是表示度为2的点。缩点的原创 2013-12-14 20:03:51 · 507 阅读 · 0 评论 -
poj 2186 tarjan算法
题意是:给出一个有向图 , 假设x点满足一个条件 , 即除本身外 , 其他所有点都能到达点x(不一定是相连 , 间接到达也行) ,这个点x就是最受欢迎的点, 问这样的点有多少了 。1、这题可以直接暴力求解 , 时间是够的 , 当要先做预处理 , 就是在输入边的时 , 把所有边都反向存储 。然后再从每一个点出发去遍历 , 如果可以到达其他所有点那么这个点就是最受欢迎的点 。2、先求出原图原创 2013-12-14 20:03:54 · 451 阅读 · 0 评论 -
poj 1236
这个题目有点难懂 , (Subtask A)和(Subtask B)是表示两个任务 , 就是两个问题 。A:求出最少给几个点发送软件 , 才能让所有点都能得到这个软件。B:在建成的图中 , 最少要增加几条边 ,才能让其变成一个强连通图 。解法:A:先求出所有强连通分量 , 然后再用这些分量去建一个图 , 图中入度为0的点 , 就是要发送软件的点 。代码:#include#incl原创 2013-12-14 20:03:56 · 491 阅读 · 0 评论 -
poj 1386 欧拉图的应用
题意:有一些磁盘排成一行 , 每个磁盘上有一个单词,问这些磁盘能不能通过重新排列 ,使得每个单词的第一个字母和前一个单词的最后一个字母想通?解法:本题中 , 对于每一个单词来说只有前后两个字母才是有用的 , 而每个单词可以看做是从首字母到尾字母的一条有向边 , 然后通过输入, 我们就能构成一个有向图 , 因此我们只需要判断这个有向图是否存在欧拉回路或通路 。注意:由于这个有向图可能不是原创 2013-12-14 20:05:40 · 1039 阅读 · 0 评论 -
poj 2762 判断有向图是…
题意:给出一个图 , 判断这个图是不是一个单连通图?单连通定义:对于有向图G , 如果对于G中的任意两点u 、 v , 存在u 到 v的或从v 到 u 的路径 ,那么这个图就是单连通图解法1:判断一个图是不是单连通 , 等于是在求这个图的最大团是不是包含所有点 , 因此 , 我们先求出强连通分量缩点 ,再用记忆化搜索 , 求这个图的最大团。解法2:我们求出强连通分量缩点之后 , 得到原创 2013-12-14 20:06:04 · 856 阅读 · 0 评论 -
hdu 4738 2013杭州网络赛一题
题意:这题其实就是一个水题 , 可题目条件不清 , 也可能是我们自身的英语水平不行 , 就是要求出一条权值最小的桥。比赛的时候 , 卡我3个多小时 。 诶 , 真是不可思议。代码:#include#include#include#includeusing namespace std;#define maxn 1010#define min(x,y) (x)#defin原创 2013-12-14 20:06:34 · 569 阅读 · 0 评论 -
poj 2793 有难度的点连通分量应用
题意:判断这个图是不是仙人掌:1、是连通图2、每条边只属于一个环如果这个图是仙人掌 , 求出这个图有多少个生成子图是仙人掌解法:我们用dfs遍历图时 , 如果当前这个点u , 可到达的点中 , 有2个点的low[]或则lowv值 会大于 low[u] ,那么这个图肯定不是仙人掌。生成图:生成图的点和原图的点一样 , 只有边的数量不一样那么求原图的生成子图 , 我们只需要删除环中原创 2013-12-14 20:06:27 · 1055 阅读 · 0 评论 -
关于求割点代码的一些细节处
割点定义:在无向图中 , 如果删除这个点之后 , 图会变成多个连通分量 ,那么这个点就是割点。解法:通过在对图dfs后 , 我们得到的是一颗树 , 然后还有一些没有被记录的回边, 如果点u是割点 , 则点u肯定存在至少一个子女w, 并且从w出发 , 不可能存在可以到达u祖先的一条回边 , 但是如果点u是祖先并且也是割点 , 那么 u至少要有两个子女。通过这个原理,我们可以通过在dfs时原创 2013-12-14 20:05:56 · 577 阅读 · 0 评论 -
poj 3177 有点难度的边-双连通
题意:题目给出一个连通图 , 问把这个图变成边-双连通图 , 最少需要添加多少条边?解法:有边-双连通分量的特点我们知道 , 每个点只属于一个边-双连通分量(这里桥不属于边-双连通分量) ,因此我们把每个边-双连通分量缩成一个点 , 并且把桥记录下来 , 那么我们就能得到有所有桥组成的一个图 , 并且这个图是连通的 ,没有环的, 那么我们的目的就把把这个图变成一个边-双连通图 , 我们就只原创 2013-12-14 20:05:47 · 525 阅读 · 0 评论 -
poj 1144 求图的割点
题意:题目目给出一个网络连接图 , 要求出图中割点数量注意:要判断图是否是连通图 , 和数据的输入方式代码:#include#include#includeusing namespace std;#define maxn 110#define min(x , y) (x)#define max(x , y) (x)>(y)?(x):(y)int low[maxn]原创 2013-12-14 20:05:42 · 606 阅读 · 0 评论 -
poj 1658 简单的Havel-H…
题意:给出 n 个点的度数 , 问这n个点能不能组成一个无向图 , 输出其邻接矩阵解法:直接调用Havel-Hakimi定理代码:#include#include#include#includeusing namespace std;#define maxn 20int grap[maxn][maxn] , du[maxn];int n;int pre[maxn];原创 2013-12-14 20:05:52 · 629 阅读 · 0 评论 -
关于无向图中连通分量缩点的问题
1、把边-双连通分量合并一般情况:是要把边-双连通分量合并成一个点 , 然后用所有的桥组成一个新图 , 这样得到的新图就是一棵树了方法:所有点只属于一个双连通分量 , 所以,对于求边-双连通分量,我们只要把所有桥都标记 ,然后再用dfs来遍历这图并且不经过桥,那么我们得到的就是一个边-双连通分量,根据这个原理 ,我们用并查集来标记两个点是不是属于同一个边-双连通分量,如果当前这条边时桥原创 2013-12-14 20:05:54 · 2827 阅读 · 0 评论 -
poj 2942 LA3523 点-双…
这个题目的意思是:有一些骑士 , 需要开圆桌会议 , 但有一些骑士不能坐在一起 , 问最少有多少个骑士不能参加任何一个会议。注意: 不是开一次会议 , 而是开很多次会议 , 每次会议至少3个人 ,问有哪些骑士是任何一次都不能参加的 , 一个骑士可以参加多个会议。这是一个无向点-双连通子图的问题 , 先把所有Bcc都求出来 , 然后判断那些bcc中的骑士超过3个人 , 并且人数奇数 ,原创 2013-12-14 20:02:48 · 468 阅读 · 0 评论 -
uva 10765(无向双连通量)
题意:给出n个点的无向图, 问你每个点的“鸽子值”(就是把这个点删除之后原图变成几个连通分块)这题有两种解法1、直接判断哪个点是割点 , 但这要加一点 , 标记一个点是否是割点时变成 , iscnt[u] += 1; 但要注意一点 , 除开根节点, 所有点在完成找割点之后,都要加1(因为还有包括图本身)2、求出这个图的所以双连通分量 , 然后再看每个点在几个双连通分量中 , 这就是其“原创 2013-12-14 20:03:41 · 587 阅读 · 0 评论 -
uva 10972 边—双连通分量
这个题目的意思是:给出一个无向图 , 先把该图边为有向图 , 如果让这个有向图变成强连通图 , 问最少要增加的边是多少 。这个题目需要用到两个定理:1、任意一个边—双连通图被定向后 , 都能成为一个强连通分量 。2、当一个无向图为边—双连通图时 , 其点的度数至少为2 。有了这两个定理后,我们只需求出边双连通分量,缩点后,计算度数为1的点的个数为a,度数为0的点的个数为b,则(a+2原创 2013-12-14 20:03:46 · 534 阅读 · 0 评论 -
poj 1300 简单的欧拉图…
这题只是一个简单的欧拉图判断 , 难点在于字符串的读取操作,由于必须全部用字符串都入数据 ,并且存在空格所以在读字符串时都用gets函数代码:#include#include#includeusing namespace std;int n , m;int xy[110];char gh[300];int main(){ while(true) {原创 2013-12-14 20:05:38 · 698 阅读 · 0 评论 -
poj 3592 有点难度的强…
题意:给出一个n*m个小方格 ,描述了矿厂的地图 ,下面输入中 , 每个方格由一个字符代标 , 总共有下面三种字符情况,1:(x是0--9的数字)这个小方格中存在x单位矿产2: ‘#’表示这个方格不能通过3: ‘*’表示这个方格具有魔法功能 , 可以瞬间移动到固定的某个方格每个方格只可以移动到东面或南面相邻的空格 , 拥有魔法功能的空格还能移动到它指定的那个空格从(0,0)这个方格出发原创 2013-12-14 20:05:58 · 539 阅读 · 0 评论 -
poj 2553
题意:给出一个图 , 满足“自己可到达的顶点都能到达自己”的顶点个数?解法:对于一个强连通分量 , 如果在这个连通分量中有一个点满足 , 那么这个连通分量中所有点的满足 。 明确了这一点之后就好做了 ,我们先把所有强连通分量都求出来 , 然后缩点 , 最后得到一个DAG图 , 我们只要求出出度为0的点 , 这些点就是答案。代码:#include#include#include#i原创 2013-12-14 20:06:01 · 630 阅读 · 0 评论 -
poj 3207 简单的2-SAT问题
题意:这题的题意比较难懂 , 在一个环上有n个点 , 两个点之间连一条边 , 每条边可以在环内也可以在环外 , 连了m条边 ,问是否存在相交的边?解法:这是一个简单的2-SAT问题 , 把每条边看成一个点 , 然而这个点有两种状态 , 再利用他们的矛盾进行建图 ,最后利用2-SAT算法就能ok代码://2-SAT#include#include#include#include原创 2013-12-14 20:06:09 · 722 阅读 · 0 评论 -
poj 1523 求图的割点
这是一个求割点的题目 ,要注意两点:1、所有点不一定是连续的2、每组数据要输出一个换行求分成几个连通分量 , 就等于是割点有几颗子树(子树中回边的lowv 比 割点的 low[u]大)+ 1 , 但是根结点例外 ,不需要+1;代码:#include#include#include#include#include#includeusing namespace std;原创 2013-12-14 20:03:49 · 524 阅读 · 0 评论 -
uva 11294 2-SAT问题
英文太差了, 这个题目愣是半天没看懂 , 后面看别人翻译才看懂 , 英语是硬伤啊题目大意:给 n 对夫妇安排座位 , 0h , 0w表示新郎新娘 , 新娘只能看到坐在她对面那一排的人 , 要求:1、同一对新郎新娘不能做在同一侧2、有m对人互为通奸(可以男男、女女、男女) , 新娘不能同时看到互为通奸的两个人。注意:新郎也有可能和其他人通奸做法:原创 2014-04-29 22:54:33 · 949 阅读 · 0 评论