当前搜索:
前言你们都会hall定理推广版本。
但是我没用hall定理做啊。题目大意一个二分图,X部每个点i连了Y部的[1,Li]和[Ri,m]。
求n-最大匹配。做法考虑到二分图最大匹配等于最小覆盖。
最优方案小我们一定是选择了Y部的一个前缀和一个后缀,剩余不能因此得到覆盖的X部点要选上。
假如我们...
前言简单套路题。题目大意一副连通图,每次询问从两个点x和y出发走出两条路径,希望至少经过一次的点数量等于z,经过的边最大编号最小是多少。简单题假如可以暴力,你可以按编号从小到大加入边,如果x和y不在一个联通块,能经过的点等于两个所在联通块大小的和,否则等于所在联通块大小,找到第一次大于等于z的位置...
前言很简单的计数套路。
没看过题解我有可能做复杂了。题意不想讲。做法先讲原图孤立点统计贡献,接下来讨论的所有点均不孤立。
我们想要统计一个联通块,可以统计特征点的个数。
即对于一个x.y,如果其是特征点,不存在与其联通的一个点t.u满足t<xt<x或x.z满足z<yz<...
题目大意给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上。贪心把两边编号都>k的边先加入。
再把剩余的边加入,若形成环就删去新加边。
闭上眼睛感受当然最优。#include<cstdio>
#include<algorithm>
...
题目描述放假啦!
小林和康娜来到了港口,看到有货船正在卸货。
港口十分狭窄,只有两个卸货区可以使用。每个卸货区上面可以堆积任意多个箱子。
每卸下来一个箱子,工作人员都会把这个箱子放在某个卸货区的顶端。之后,当车辆来运走这个箱子的时候,也必须保证这个箱子在某个卸货区的顶端。
港口今天一共运来...
题目大意给定n个点m条无向边的图G,求G的最小生成树个数,模31011。
其实有个特殊条件但我们的高端做法可以忽略。
n<=100,m<=1000矩阵树定理我们来思考一个图G所有最小生成树的同一个性质:
假如我加入所有边权<=w的边,任何生成树的联通情况一定是一致的。
脑...
题目大意对于一个无向图,边有边权。对于每组询问u、v,如果可以找到两条从u到v不相交的路径,输出路径上边权最大值的最小值。维护边双我们考虑到,如果按照边权从小到大加边,第一次使得u和v处在同一个边双联通分量时我就求得了答案。
考虑一个很强的方法,用LCT或启发式合并维护森林,动态维护双连通分量。...
题目大意一堆未知数,之间有权值关系如x-y=z
每次给出关系或询问两个未知数的差权值并查集关系的维护显然用并查集。
每个节点维护如果父亲权值为0我的权值应该是多少即可。#include<cstdio>
#include<algorithm>
#define fo(i,a...
题目大意一颗树,每条边有边权[l,r]。
多次询问每次给定一个权值v,保留树上所有的边[l,r]使得l<=v且v<=r,然后求这片森林的最长简单路径长度。经典CDQ考虑分治算法
把每条边插入线段树区间中
然后一个权值的答案就是加入根到其对应叶子路径上经过的线段树节点上的所有边。 ...
题目大意一颗树边上有边权,每次要么把一条边边权改小(不会改到1以下),要么给定权值v,让它沿一条路径整除下去,问最终变成多少。
所有权值均在10^18以内套路除以大于1的数最多除64次就会变成0。
边权只会改小,于是我们把边权为1的缩起来。
并查集实现即可。#include<cstdi...
题目大意维护一个图,若干操作每次加入一条边或删除一条已有边,每次操作后都输出该图是否为二分图。CDQ预处理每条边的存在时间。
考虑一个时刻,此时存在的边是所有存在时间区间包含该时刻的。对于每个时刻做的话,就是把所有包含该时刻的时间区间对应边加入并查集。
现在考虑把所有时刻一起做。
solve...
题目大意给定一张图,每次询问编号在[l,r]的边连上后会形成多少联通块。离线做法我们考虑莫队。
考虑左端点所在的每一块,左端点到块末最多根号的距离,右端点是单调的。并查集容易添加,因此只保留块末到右端点的联通情况,每次暴力加上块末到左端点部分。在线做法把加入1~i条边,每条边权值设置为编号,所形...
题目大意有两种操作,添加一条边或者询问两点在哪次操作后联通。
强制在线。辣鸡LCT一条边的权值是其的加入时间。
询问操作便是询问路径上的最大值。
我们不会维护边权,因此可以把边变成的点,向两端连边。
愉快被卡常。#include<cstdio>
#include<algo...
题目大意有n个结点,初始没有边。m个操作,操作类型有三:
1、a与b之间连一条长度为i的边(i为操作编号)
2、删除比边权最大的k条边。
3、撤销刚刚执行的操作,保证撤销的不是撤销操作。
每次操作后输出最小生成树所有边权和。可持久化并查集有许多版本,于是我们发现版本之间形成树的结构,为什么...
题目大意有n个点,初始时有一些边。
每次操作要么加一条边,要么询问一个点所在联通块数值第k大的点。水题联通情况并查集维护,每个连通块再对应一个权值线段树。
合并连通块就是线段树合并。#include<cstdio>
#include<algorithm>
#define...
题目大意一颗树,除根节点外初始都是白点,根节点是黑点。
每次染黑一个结点或者询问一个结点的最近黑色祖先。倒序处理倒着做,于是每次是染白一个结点。
那么就并查集搞呀!#include<cstdio>
#include<algorithm>
#define fo(i,a,b...
题目大意有一个无前导0的n位数,有m个限制形如[l1,r1]=[l2,r2],问满足条件的数有多少种,答案模10^9+7。倍增我们用ST表,f[i,j]表示[i,i+2^j-1]这一段。
那么初始时每一段单独成一个集合。
对于一个限制可以拆成log 份,然后进行集合合并。
然后呢,如果任意f...
题目大意实现一个可持久化并查集做法用可持久化线段树或平衡树之类的维护一个可持久化数组就好了。
这里我用了rope大法#include<cstdio>
#include<algorithm>
#include<ext/rope>
#define fo(i,a,b...
题目描述线性做法我们设left[i]表示最大的k#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(i...