图论
文章平均质量分 78
图论
黑夜和白天
过去无可挽回,未来可以改变
展开
-
二分图 ---- 树的二分图性质 2020icpc 济南 J Tree Constructer(构造)
题目链接题目大意:就是给你一颗树,你要对树上点进行赋值,使得相邻两个有边的点的权值或是260−12^{60}-1260−1,任意两个没边的两个点的或不能为260−12^{60}-1260−1n∈[1,100]n\in[1,100]n∈[1,100]解题思路:很明显题目就是要把点分成两个集合,每个集合里面的点两个或的值不为260−12^{60}-1260−1。那么我们可以用二进制里面的最高位进行集合的区分,就是高位是1,低位全是0的一个集合高位是0,低位全是1的一个集合对于高位是0的集合原创 2021-11-22 16:09:13 · 139 阅读 · 0 评论 -
图论 ---- C. Graph Transpositions(数据分阶段分层图最短路(二维) + 贪心)
题目链接题目大意:对于给你一个有向图,你有两次操作你单前在uuu点从u→vu\rightarrow vu→v花费1s1s1s你可以把整个图的边都反向!!就是u→vu\rightarrow vu→v变成u←vu\leftarrow vu←v的你第KKK次操作花费的代价是2K−1s2^{K-1}s2K−1s问你从1号点到n号点最短时间是多少?解题思路:首先我们知道如果存在一条路径的话那么最少时间是n−1(s)n-1(s)n−1(s)那么218≤200000<2192^{18}\l原创 2021-10-16 15:31:32 · 149 阅读 · 0 评论 -
图论 ---- F. Useful Edges(不等式移项优化预处理 + 路径和简单路径的区别 + 最短路)
题目链接题目大意:给出由 nnn 个点构成的无向图,再给出 qqq 个三元对 (u,v,l)( u , v , l )(u,v,l),现在问有多少条边 (i,j)( i , j )(i,j) 可以和至少一个三元对匹配,可以匹配的条件是:从点 uuu 到点 vvv 且包含边 (i,j)( i , j )(i,j) 的最短路的长度需要小于等于 lll解题思路:注意这里path指的是路径,你可以重复经过某些点对于一条边我们看看它是否成立我们是这样看的就是设dist[i][j]dist[i][j原创 2021-10-15 19:41:40 · 140 阅读 · 0 评论 -
图论 ---- E. Bear and Forgotten Tree 2(判补图的联通性技巧 图遍历的优化 条件拆分)
题目大意题目大意:给你nnn个点,mmm对关系表示(ai,bi)(a_i,b_i)(ai,bi)之间是没有边的问你能否构建出一颗树满足111号点的度数为kkk?解题思路:如果没有后面的条件就是判断这个图的补图的连通性?但是怎么判呢?这里就是我们直接对点进行bfs每个点只访问一次。因为直接用边转移的话那么复杂度是O(n+m)m∈[0,n2],n∈[1,1e5]O(n+m)m\in[0,n^2],n\in[1,1e5]O(n+m)m∈[0,n2],n∈[1,1e5]不可以结束我们可以直接去枚原创 2021-10-15 19:25:49 · 123 阅读 · 0 评论 -
图论 ---- C. Nastya and Unexpected Guest(图上最短路dp + 01bfs)
题目链接题目大意:给你一条长度为 n 的马路(可以将马路视为一个数轴),你要从 0 位置开始到达 n 位置,你每秒走 1 个长度单位。在马路上有 m 个安全岛,它们的位置已给定。该马路的绿灯亮 g 秒,红灯亮 r 秒,第 0 秒时信号灯刚由红灯变为绿灯。绿灯亮时,你必须一直向前走,到达一个安全岛时,你可以选择调头。红灯亮时,你必须一直停在某个安全岛处,直到绿灯再次亮起。求你最快需要多少秒能从马路的 0 位置到达 n 位置(无法到达则输出 -1)解题思路:本质上就是一个最短路,但是这里面有个限制原创 2021-10-09 10:24:06 · 155 阅读 · 0 评论 -
图论 ---- E. Minimum Path(分层图最短路 用分层图对边权操作进行选择)
题目链接题目大意:两点间最短路的定义变成:所有的边之和−max+min所有的边之和-max+min所有的边之和−max+min解题思路:这里很明显就是变成了最短路的时时候就是把路径上边权最小值乘2,然后把最大值去掉?相当于免费?是不是很像分层图?就是你有两次机会:1.你可以把一条路径上的边权变成0。2.是把边权翻倍为什么跑分层图最短路就是答案呢?因为根据最短路的性质肯定是去大边,翻倍小边我们一共有4种状态:1.两个机会都没用2.用了第一个条件,第二个没用3.用了第二个条件,第一原创 2021-10-08 20:55:40 · 132 阅读 · 0 评论 -
图论 ---- F. The Shortest Statement (最短路的性质 + 任意两点间最短路 + 图转树)
题目链接题目大意:给你一个nnn个点mmm条边的无向图,就是动态询问任意两点间的最短路n,m∈[1,1e5],m−n≤20n,m\in[1,1e5],m-n\leq20n,m∈[1,1e5],m−n≤20解题思路:这里有个很重要的点就是m−n≤20m-n\leq20m−n≤20这让我们很容易联系到先求一个树。那么最多会多出212121条边但是这又有什么用呢?我们知道在树上面两点间的最短路径就是唯一的。那么如果不是那么一定是进过了若干条非树边。我们知道对两点间最短路径上面的点到这两个点原创 2021-10-08 20:09:28 · 88 阅读 · 0 评论 -
图论 ---- CF1209F. Koala and Notebook(多位数字拆边+BFS)
题目链接题目大意:给你一个nnn个点mmm条边的无向联通图,每条边上面都有一条权值就是输入时候的位置,然后问你从111号点出发到其他n−1n-1n−1个点最小权值是多少?路径权值是路径上面的数字拼接起来的结果,不是相加解题思路:如果直接拼接起来非常麻烦。情况太多了而且多位数拼接也不好理解我们可以对这个路径进行拆边,比如说路径(u,v)权值是982(u,v)权值是 982(u,v)权值是982那么我们可以这样(u,v′)权值是9,(v′,v′′)权值是8,(v′′,v)权值是2(u,v')权原创 2021-09-23 20:57:39 · 194 阅读 · 0 评论 -
图论 ---- DAG删点+枚举+暴力+离线前缀异或和 J Red-Black Paths (2021 icpc网络赛第一场)
补题地址题目大意:一开始给你一个空图。有4个操作在图中给u→vu\rightarrow vu→v加一条有向边把uuu节点涂成红色把vvv节点涂成黑色询问:在上次询问之后,所有增加的红黑路径的异或和是多少路径权值定义就是点的编号×点所在路径的位置求和点的编号\times 点所在路径的位置求和点的编号×点所在路径的位置求和数据范围:解题思路:对于这么多加加涂涂的图里面肯定在线求解肯定不行我们考虑离线:就是我们先把最终的图给建出来,然后暴力求解所有的路径,在路径上面每个点和边都原创 2021-09-22 13:22:37 · 309 阅读 · 0 评论 -
图论 + 数论 ---- CF1325E E. Ehab‘s REAL Number Theory Problem (约数个数 + 枚举 + bfs找最小环)[从图结构优化搜索]
题目链接题目大意:给你nnn个数,每个数保证约数个数不超过777个。问你从中选出若干个数的乘积是完全平方数,最少要选择多少个数?,不存在输出-1.题目思路:1.每个数约数不超过7个→\rightarrow→每个数最多只有两个不同的质因子n=p1a1p2a2...pnann=p_1^{a1}p_2^{a2}...p_n^{an}n=p1a1p2a2...pnanNumber of divisors=(a1+1)∗(a2+1)..∗(an+1)≤7\text{Numb原创 2021-09-18 21:04:09 · 138 阅读 · 0 评论 -
图论 ---- CF700 C. Break Up(Tarjan找桥+枚举+思维)
题目链接题目大意:题目思路:一开始我们看到点和边很小,并且才删两条边?我就想能不能枚举删除一条边然后看看再去看能不能再删除一条边使得不连通那么第二条边肯定是桥了!!,就是删除第1条边之后的桥那么我们枚举删除的第一条边找桥时间复杂度O(m×(n+m))O(m\times(n+m))O(m×(n+m))过不了我们想想第一次枚举的边肯定是s→ts\rightarrow ts→t路径上面边,那么我们可以先找出一条路径然后再去枚举,我们知道路径最长n−1n-1n−1,复杂度就变成了O(n×(n+m原创 2021-09-17 22:18:32 · 133 阅读 · 0 评论 -
根号分治 ---- D. Mr. Kitayuta‘s Colorful Graph(根号均摊复杂度 + 数据结构维护)
题目链接题目大意:给你一个nnn个点mmm条边的无向图,每条边上面有个颜色cic_ici,每次询问给你一个(u,v)(u,v)(u,v),问你有多少种颜色使得至少有一条路径从(u→v)(u\rightarrow v)(u→v)是同一种颜色的?n,m,q∈[1,1e5]n,m,q\in[1,1e5]n,m,q∈[1,1e5]解题思路:首先我们先边排序,按照颜色分块,每次我们只对用一种颜色的边进行建图用并查集维护连通性假设每次我们加入的边是xxx个,那么循环的轮次是mx\frac{m}{x}原创 2021-09-17 10:26:23 · 163 阅读 · 0 评论 -
图论 ---- CF1495D .BFS Trees(图论最短路生成树+枚举计数+树的层次性)
题目大意题目大意:解题思路:首先我们肯定先把任意两个点之间的最短路求出来→Floyed\rightarrow Floyed→Floyed最短路算法现在我们假设只固定两个点x,yx,yx,y去求解答案。首先我们发现的是xxx和yyy之间一定要是最短路,如果有多条最短路怎么办?这肯定是不存在答案的!!因为这个路径最多有一条在树上面,但是对于另外的路径上面的点,肯定不满足最优了,因为你yyy要经过xxx,或者xxx要经过yyy去链接里面的点,肯定不是最短路了那么就是有多条最短路答案肯定是0原创 2021-09-17 09:31:34 · 128 阅读 · 0 评论 -
图论 ---- E. Pairs of Pairs(构造+无向图的dfs树的性质)
题目链接题目大意:题目解法:首先我们先对这个图求一个dfs树dfs树dfs树,那么对dfs树dfs树dfs树求树的直径rrr如果⌈n2⌉≤r\lceil\frac{n}{2}\rceil\leq r⌈2n⌉≤r直接输出答案就好了如果不是对于第二怎么求呢?我们知道对于⌈n2⌉≤r\lceil\frac{n}{2}\rceil\leq r⌈2n⌉≤r那么肯定这个dfsdfsdfs树的深度deepdeepdeep是deep≤⌊n2⌋deep \leq \lfloor\frac{n}{2}\rf原创 2021-09-14 22:01:27 · 139 阅读 · 0 评论 -
图论 ---- B. Graph Subset Problem (图中找k阶完全子图 or 找一个子集里面的点的度数都打过k)
题目链接题目大意:解题思路:输出1的解法:就是我们每次都把degree(a)<kdegree(a)<kdegree(a)<k的点删除,如果最后还剩下点那就可以输出111输出2的解法:就是我们每次都把degree(a)<k−1degree(a)<k-1degree(a)<k−1的删除,如果访问到了degree=k−1degree=k-1degree=k−1的点,把那个k−1k-1k−1个点pushpushpush进vectorvectorvector原创 2021-09-14 21:47:10 · 688 阅读 · 0 评论 -
图论 ---- 启发式合并 + 并查集模拟 + 证明 F. Phoenix and Earthquake
题目大意:给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai ,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau+av≥x,合并之后的沥青为au+av−xau + av − xau+av−x,现在让你输出一种选选边方式,选n−1n-1n−1条边使得nnn个点联通。n,m<=3e5,n−1≤m,1≤x,ai≤1e9n , m < = 3 e 5 , n − 1 ≤ m , 1 ≤ x , a i ≤ 1 e 9n,m<=3e5,n−1≤m,原创 2021-09-08 22:12:43 · 228 阅读 · 0 评论 -
图论 + 并查集 ----最小生成树重构图 + 可撤销并查集 + set启发式合并 时间线上的离线求解 D. Graph and Queries
解题思路题目大意:就是给你一个无向图,每个点都有一个权值,和qqq次询问每次询问有两种操作1 x:就询问从x点出发,能访问到的最大权值是多少,并把最大权值那个点的权值设置为02 x:就是删除第xxx条边解题思考首先我一开始想正着做但是很麻烦我考虑每个要被删除的边,它要是对答案有影响那么它肯定是破环了连通性,我们可以先求个生成树,维护好连通性那么我们先把没有要删除的边先求一个生成树,因为这些边是不会被删除的连通性不会变了,然后把,删除的边,按照逆序,为了方便并查集维护生成树时候撤销原创 2021-09-08 20:29:44 · 132 阅读 · 0 评论 -
图论 ---- F. Graph Traveler 记忆化搜索 + 思维预处理(数论同余恒等式)
题目链接题目大意:q∈[1,1e5],n∈[1,1000],mi∈[1,10]q\in[1,1e5],n\in[1,1000],m_i\in[1,10]q∈[1,1e5],n∈[1,1000],mi∈[1,10]k,c∈[−1e9,1e9]k,c\in[-1e9,1e9]k,c∈[−1e9,1e9]解题思路:因为询问很多,那么我们不可能每次询问都暴力搜索而且k,ck,ck,c很大我们观察一下mim_imi才101010,我们是不是可以枚举从每个点的不同的状态出发,处理出所以的状态?原创 2021-09-04 19:19:42 · 182 阅读 · 0 评论 -
图论 ---- 思维搜索全图任意位置传送 1520G - To Go Or Not To Go?
题目链接题目大意:给出网格,格子中有墙。向相邻无墙位置移动花费www,有的位置有权值ai,ja_{i,j}ai,j,这样的点是传送门,可以从一个传送门传到另一个传送门,花费ai,j+ai,j′a_{i,j}+a'_{i,j}ai,j+ai,j′。问(1,1)(1,1)(1,1)到右下(n,m)(n,m)(n,m)花费。解题思路:首先我们知道对于传送因为是任意两点都可以到达的那么,a−>b−>ca->b->ca−>b−>c,肯定不比a−>ca-&g原创 2021-07-29 21:07:13 · 92 阅读 · 0 评论 -
图论(二分图构造) ---- 二分图的性质 C. Arpa’s overnight party and Mehrdad’s silent entering
题目大意:有 nnn 对情侣坐在 2n2n2n 个板凳上,板凳排成环形。每张凳子恰好坐一个人。 现在有两种食物分给他们。规定:1、每对情侣中,俩人不能分到同一种食物;2、环上任意三个相邻的人,不能全分到同一种食物。给出情侣关系,请构造一种方案或输出 -1。n<=105n<=10^5n<=105解题思路首先我们对这个题目进行化简就是把任意两个不同食物的进行连边。我们先不考虑情侣先看看第二条件对于任意3点之间我们只有这三种情况,我们发现这三个点都是二分图!!那么我们就很原创 2021-09-08 21:56:06 · 272 阅读 · 0 评论 -
图论 ---- 图论构造成二分图去判断 F. Figure Fixing
题目链接题目大意:就是给你一个无向联通图,每个节点有一个初始权值viv_ivi和目标权值tit_iti,现在对于每条边相邻的两个节点(u,v)(u,v)(u,v),你可以给这两个节点的初始权值加上任意的整数kkk,现在叫你判断是否存在一种策略使得整个图所有的点的vi=tiv_i=t_ivi=ti解题思路:首先我们知道对于我们加了一个数值kkk整个图的初始权值之和就会加2k2k2k那么对于∑vi和∑ti\sum v_i 和\sum t_i∑vi和∑ti奇偶性不同的图一定是no!no!原创 2021-07-20 10:05:27 · 159 阅读 · 0 评论 -
图论 ---- D. Multiples and Power Differences (全局lcm + 矩阵二分图)
题目链接题目大意:给你一个n×mn×mn×m的矩阵aaa1≤a[i][j]≤161≤a[i][j]≤161≤a[i][j]≤16要你构造矩阵bbb,使得bbb矩阵的元素为aaa矩阵元素的倍数且b矩阵相邻元素的差值一定是k4k^4k41≤k1\leq k1≤k为任意正整数,且不是固定的1≤b[i][j]≤1e61≤b[i][j]≤1e61≤b[i][j]≤1e6这个构造非常妙!!我们看那个aij非常小那么我们可以对1...16求个lcm=720720≤1e6a_{ij}非常小那么我们可原创 2021-08-29 11:25:44 · 143 阅读 · 0 评论 -
图论 ---- 构造DFS树的思想 K - Boomerangs Gym - 102001K
题目链接题目大意:解题思路:启发性思考首先我们先图切成dfs树,然后给图一个稳定结构之后,我们就可以去构造了对于每个点我们从第底端开始构造每次把每次点的儿子两两匹配,如果是奇数个儿子就把多出来的儿子和父亲匹配,这样自底向上去构造是最优的AC code#include <bits/stdc++.h>#define mid ((l + r) >> 1)#define Lson rt << 1, l , mid#define Rson rt <原创 2021-08-25 21:16:50 · 178 阅读 · 0 评论 -
图论 ---- Tajran找割点 牛客多校2021 J Defend Your Country
解题思路:首先我们知道对于点数为偶数的联通块是不用管的对于奇数个连通块里面的点:点分两种:普通的点:对于奇数个点的连通块,删除一个普通点就很好了。那么就是删除那个权值最小的普通点就可以了割点:我们把这个点删了之后,会出现两个联通块,如果两个是偶数那么没事,如果还有连通块是奇数的话那么我们还得继续删除非这个块大小是1!对于你删了一个割点uuu之后,出现了奇数块,如果对于这个奇数块我们继续删除里面的一个割点vvv使,一直重复上面操作使得最终都是偶数块偶数块偶数块我们考.原创 2021-08-03 18:34:56 · 200 阅读 · 0 评论 -
图论 ---- dijkstra变种dp Codeforces Div2 703 E. Paired Payment
题目链接题目大意:无向图,但是一次一定要走两步,权值为两个边边权和的平方。求1到其他每个点的最短距离。n∈[1,1e5],m∈[1,min(2e5,n(n−1)2)],wi∈[1,50]n\in[1,1e5],m\in[1,min(2e5,\frac{n(n-1)}{2})],w_i\in[1,50]n∈[1,1e5],m∈[1,min(2e5,2n(n−1))],wi∈[1,50]解题思路:图上dpdpdp这个题的突破口在于那个权值,因为才505050非常小一开始我最朴素原创 2021-08-24 10:01:12 · 90 阅读 · 0 评论 -
图论500题
=以下是最小生成树+并查集==========【HDU】1213 How Many Tables 基础并查集★1272 小希的迷宫 基础并查集★1325&&poj1308 Is It A Tree? 基础并查集★1856 More is better 基础并查集★1102 Constructing Roads 基础最小生成树★1232 畅通工程 基础并查集★1233 还是畅通工程 基础最小生成树★1863 畅通工程原创 2021-07-31 11:03:21 · 319 阅读 · 0 评论 -
图论500 ---- HDU3631 Shortest Path Floyed 插点法 真正了解Floyed
题目链接题目大意:一个单向图,先输入n个点,m条边,k次询问。接下来m行输入相连点的边和距离,然后输入k次询问。输入0,x,表示标记x点,输入1,x,y,表示询问点x到点y的距离。只能走已标记的点。如果标记的点已标记 输出 ERROR! At point x,如果询问距离的两点有未标记的,输出 ERROR! At path x to y,如果都标记了,但是走不通,则输出 No such path,否则输出两点之间的距离。floyd的灵活运用,直接用新标记的点更新,避免了O(n∗n∗n)O(n*n*n原创 2021-08-12 18:47:38 · 100 阅读 · 0 评论 -
图论500题 ---- 枚举(最短路上的边)+最短路 删掉任意一条边的最长最短路 HDU1595
题目链接题目大意:有一城市,这个城市有nnn个地点和mmm条连接他们的路,点的编号是从111到nnn,小X住在111,他想去nnn。但是最近正在维修公路,也就是说这mmm条路有且只有一条是坏的,但是小X不知道是哪一条,一条很关键的路坏了路程就会增加很多,所以小X想知道从111到nnn 最坏情况下的路程。你能帮助他吗?解题思路:最直接的想法,就是枚举每一条给的路径,把这条路径“删掉",删掉可以把邻接矩阵对应的边赋值为INF,然后依次求最短路。但是所有的边数太多了,有1000*999/2条,原创 2021-08-04 10:30:33 · 170 阅读 · 0 评论 -
图论500题 ---- 并查集+树形dp+枚举 求解动态的最小生成树 HDU 4126
题目链接题目大意:给一图,n个点,m条边,每条边有个花费,给出q条可疑的边,每条边有新的花费,每条可疑的边出现的概率相同,求不能经过原来可疑边(可以经过可疑边新的花费构建的边),注意每次只出现一条可疑的边,n个点相互连通的最小花费的期望。解题思路:对于每次询问, 都是将a,b之间的边增加到c, 会出现 两种情况:如果边权增加的那条边原先就不在最小生成树中,那么这时候的最小生成树的值不变如果该边在原最小生成树中,那么这时候将增加的边从原最小生成树中去掉,这时候生成树就被分成了两个各自联原创 2021-08-01 18:40:02 · 87 阅读 · 0 评论 -
图论500题 ---- 并查集求路径上最大值最小不超过K的点对数 HDU Portal
题目链接题目大意:就给你一个图,qqq次询问,问你这个图上有多少对点之间的所以路径上的最大值的最小值不超过kkk?解题思路:首先我们知道这本质上就是求两个点联通的路径上的最大值最小是多少?那么这个就和并查集有关系了,首先我们知道按照边的权值从小到大排序之后的依次加入图中那么如果两个点联通了那么这个边就是最小的最大值!那么我们怎么统计询问呢?就是离线查询,把询问按照从小到大排序,我们知道实际上答案就是各个联通块里面挑出两个点,因为每次只合并两个联通块,那么我们就可以动态的去维护答案,每次减去原创 2021-08-01 11:23:17 · 114 阅读 · 0 评论 -
图论 ---- Codeforces Round #649 (Div. 2)D题[dfs求环+深度分层求图中独立集]
D. Ehab’s Last Corollary题目大意:就是给你一个联通图,你有两种选择1.你可以输出包含⌈k2⌉\lceil{k\over2}\rceil⌈2k⌉个顶点得独立点集,什么是独立点集:集合中任意两点都没有边相连2.你要找到顶点数<=k<=k<=k的环解题思路:求环很简单就是dfs一遍如果深度大的点指向了深度小的点那么就是有环,现在是怎么求独立集?我们一个想法就是将有边相连的点就将它们分开那么我们就可以按深度进形分层,如果两个点有边按照dfs序肯定不在同一层原创 2020-06-18 08:11:19 · 152 阅读 · 0 评论 -
图论500题 ---- (枚举+并查集)求图上路径权值差值最小 HDU find the most comfortable road
题目链接解题思路:对于两个点的路径假设我们把边按照边权进行排序那么,再把边依次加入图中判断两点的联通性,那么这个边就是两个点联通的最小的最大值,但是最大的最小值怎么找?因为我们是把边权按照从小到大进行排序那么我们可以枚举从第iii条边开始加边,加到第jjj条边的时候u和v联通了u和v联通了u和v联通了,那么答案就按e[j].w−e[i].we[j].w-e[i].we[j].w−e[i].w对上取minminmin即可#include <bits/stdc++.h>#defi原创 2021-07-31 10:05:40 · 112 阅读 · 0 评论 -
2020牛客多校第8场i-Interesting Computer Game[图论签到]
#include <iostream>#include <cstdio>#include <stack>#include <sstream>#include <limits.h>#include <vector>#include <map>#include <cstring>#include <deque>#include <cmath>#include <...原创 2020-08-04 09:35:10 · 108 阅读 · 0 评论 -
[Poi2010]Hamsters[字符串hash+floyed+矩阵快速幂]
tip:这里题意有两个细节就是:1.出现名字次数[不指定是哪些名字]2.名字是不相互包含的解题思路:我们先看看样例:szymonikaszymonikatomck;[长度23]其中:szymon和monika出现两次,tomck出现一次这时候我们就会联想到最短路:将每个单词看成一个点,对于任意两个单词i和j我们有两种选择就是把i接到j后面,或者把j接到i后面,边权就是拼接之后[最长的公共部分会重叠]字符串增加的长度举个例子:设szymon是3号点,monika是1号点,当1号接在3号后面时..原创 2020-08-12 22:02:00 · 265 阅读 · 0 评论 -
2020牛客多校G[并查集的两种思想,按秩合并+路径压缩]
题目链接题目大意:就是有n个点m条边,每次第i个点属于第i个联通块,现在有q次询问给你一个数o,如果o这个联通块没有相连的联通块就没什么事情发生,如果有的话,就将这几个点的联通块都并入o所在的联通块解题思路:模拟一遍就好了没啥:就是在合并集合的时候要按秩合并,否则会超内存?,玄学。。#include <iostream>#include <cstdio>#include <stack>#include <sstream>#include &原创 2020-07-23 07:26:14 · 128 阅读 · 0 评论 -
有向图强联通分量
Tarjan算法求强连通分量(scc)定义两个时间戳:dfn[u]表示遍历每个点第一次遍历的时间,low[u]表示遍历到的最小时间戳是多少,u是其在强联通分量的最高点,等价于dfn[u] = low[u]模板#include <iostream>#include <cstdio>#include <cstring>#include <stack>#define f first#define s secondusing namespace原创 2020-05-18 12:29:13 · 182 阅读 · 0 评论 -
无向图的双联通分量
基础知识割点:把这个点去掉,连通块数量增加桥:把这条边删掉,连通块数量增加割点之间的边不一定是桥,桥两边不一定是割点边双联通:边双连通分量:对于一个无向图的子图,当删除其中任意一条边后,不改变图内点的连通性,这样的子图叫做边的双连通子图。而当子图的边数达到最大时,叫做边的双连通分量。数组:dfn[n],low[n]1如何判断这条边数桥(u->v)dfn[u] < low[v]2,如何找边双联通分量(1)将所有桥删掉,(2)Tarjan算法stackdfn[n] == low[原创 2020-05-19 15:42:57 · 323 阅读 · 0 评论 -
带花树[一般图最大匹配模板]
在这里插入代码片const int maxn=1005;const int maxm=1e6+5;struct daihuashu{ struct edge {int v,nxt;} e[maxm]; int n,m,que[maxm],ql,qr,pre[maxn],tim=0,ans=0; int h[maxn],tot=0,match[maxn],f[maxn],tp[maxn],tic[maxn]; daihuashu() {} daihuashu(原创 2020-08-06 16:03:33 · 98 阅读 · 0 评论