连通图
连通图
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
HDU 4587 TWO NODES (强连通分量+割点)
题意:无向图,求删掉两个点后最多的强连通分量有多少。 题解:强连通分量+割点 先考虑删掉一个点,再考虑求剩下图的割点,增加的连通块用add_block表示,再加上原来的连通块数量求最大即可。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #includ原创 2020-07-31 21:42:59 · 141 阅读 · 0 评论 -
HDU 4738 Caocao‘s Bridges (桥+特判连通)
题意:给出一张无向图,求最小权的桥。 题解:桥 跑tarjan求桥。 特判要注意两个点: ①若本身不连通,输出0 ②若最小权为0,输出1 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<queue> #include<原创 2020-07-11 18:01:44 · 115 阅读 · 0 评论 -
HDU 4685 Prince and Princess (二分图匹配+强连通分量)
题意:有n个王子和m个公主,每个王子都有若干个喜欢的公主,王子需要娶喜欢的公主,一个王子只能娶一个公主。输出对于每个王子,他可以娶的公主的编号的集合。王子娶这个集合的任一个公主,其他王子与公主的最大匹配数不变。 题解:二分图匹配+强连通分量 对于题目要求王子娶集合任意公主,最大匹配都不变,我们可以想到强连通分量,我们在分量内放入等量的能够任意匹配的王子和公主,这样无论王子选哪一个,其他王子也有的选。 但是由于这题王子和公主的数量不等,我们可以引入虚拟结点,具体一点来说就是:在求完最大匹配后,对于未匹配的结点原创 2020-07-11 17:39:17 · 203 阅读 · 0 评论 -
HDU 4635 Strongly connected (强连通分量+缩点)
题意:给出一张简单图,问最多加多少边让这张图还是简单图(无重边,无自环),且不是强连通图。 题解:强连通分量+缩点 若最后的图仍不是强连通的,且要边最多,那么他一定由两个强连通分量构成。 首先我们明确一点,边数最多的简单图是完全图,若边有向,则边数为n∗(n−1)n * (n-1)n∗(n−1)。 假设一个强连通分量有xxx个点,另一个分量有yyy个点,x+y=nx+y=nx+y=n 我们要让边数最多,则两个分量必定都是完全图,且两个分量间只有单向边。 由此我们可得: 第一个分量边数:x∗(x−1)x *原创 2020-07-10 22:31:49 · 174 阅读 · 0 评论 -
HDU 4612 Warm up (边双连通分量缩点+树的直径)
题意:给出一个无向图,可能包含重边,现在可以在这个图上加上一条边,问加完这条边后图上最少有多少桥。 题解:边双连通分量缩点+树的直径 先用tarjan求边双连通分量,再进行缩点,那么就形成了一棵树,树边都是桥。 题目要求我们要将两个点连接起来,让桥消失的最多,那我们连的必然是属于不同分量的两点,且两点连起来必然形成一个环,除了连的那一条边,环其他的边就是我们能够消除的桥的数量,所以我们要让两个分量离的尽可能远,也就是缩点之后树的直径。 如何求树的直径呢? 我们先从点1跑一遍bfs,找到离1最远的那个点,然后原创 2020-07-10 20:42:28 · 205 阅读 · 0 评论 -
图的割点、桥与双连通分支的基本概念
[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。一个图的点连通度的定义为,最小割点集合中的顶点数。 类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。一个图的边连通度的定义为,最小割边集合中的边数。 [双连通图、割点与桥] 如果一个无向连通图的点连通度大于1,则称该图是点双连通的(point biconnected),简称双连通或重连通。一个图有割点,当原创 2020-07-10 17:14:19 · 456 阅读 · 1 评论 -
POJ 3177 Redundant Paths (边双连通分量缩点)
题意:有N个牧场(牧场编号1~N),Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走。现已有M条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路。两条独立的路是指:没有公共边的路,但可以经过同一个中间顶点。 题解:边双连通分量 题目的意思转化一下就是:至少要添加几条边,才能使其变为双连通图。 一个有桥的连通图,如何把它通过加边变成边双连通图?方法为首先求出所有的桥,然后删除这些桥边,剩下的每个连通块都是一个双连通子图。把每个双连通子图收缩为一个顶点,再把桥边加回来,最后原创 2020-07-10 17:06:45 · 155 阅读 · 0 评论 -
POJ 3694 Network (边双连通分量缩点+桥+lca)
题意:一个无向图有重边,下面q个操作,每次在两个点间连接一条有向边,每次连接后整个无向图还剩下多少桥。 题解:边双连通分量缩点+桥+lca 先跑tarjan,求出原来桥的数量,并用并查集进行缩点,那么剩下的就是一棵树了。 在跑tarjan的时候我们用fa[]fa[]fa[]数组建树。 添加边(u,v)的时候,若u和v在一个缩点中,桥的数量不会减少;若u和v在两个不同的缩点中,就可以减少桥的数量,其实也就形成了一个环,我们只要查询最近公共祖先lca,遍历u和v之间的每一条树边,判断有多少条是桥即可。 存个边双原创 2020-07-10 16:33:26 · 169 阅读 · 0 评论 -
UVA 796 Critical Links (桥)
题意:给出一张无向图,求出这个图的桥,并且把桥按照起点升序输出(每个桥的起点要比终点小)。 题解:桥 对于一个无向图,如果删掉一条边后图中的连通分量数增加了,则称这条边为桥或者割边。 我们用tarjan求出桥后,排序一下即可。 注意终点也是升序! #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl原创 2020-07-09 18:36:03 · 138 阅读 · 0 评论 -
UVA 315 Network (割点)
题意:给出一张无向图,求割点有多少个。 题解:割点 割点:无向连通图中,如果删除某点后,图的连通分量增多,则称该点为割点。 kuangbin模板,实现细节见代码注释,把桥也放进去了。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<原创 2020-07-09 17:26:21 · 109 阅读 · 0 评论 -
POJ 1236 Network of Schools (强连通分量+缩点)
题意: 题解: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #include<queue> #include<stack> #include<cmath> #include<vector> #inclu原创 2020-07-09 16:41:45 · 114 阅读 · 0 评论