- 博客(18)
- 收藏
- 关注
原创 二分图博弈(tip)
2.若改点在所有最大匹配中均出现过,则所有最大流中源点s到改点均有流量。的路径,那么求最大流的最后一次bfs中(无增广路,必定到不了。1.把这个点及其相邻的边删除,若最大匹配数不变,则改点满足。能到的点都会被标记起来,然后判断即可。到改点的边有流量,且残量网络不存在。相当于在某个最大流方案中,
2024-05-19 20:20:46
418
1
原创 异或边的最小生成树
用最高不同位将数字进行分开,之后内部的数字再用同样的方法进行异或连边,比如100和01 10 11 从第3位就不同,那么100就要在1 10 11 中找一个进行异或,1和10 11 在第二位不同,之后 10和11先做,后和1做,最后和100做,复杂度是logn的,每次进行查找还需要30,理论上也是不会炸的。给你1e5个点,每个点有一个权值,两个点之间如果连边,那么边权就是这两个点权异或起来的值,要你求出所有点组成的最小生成树。说实话我真的不可能想的到,哪怕知道了分治的做法,也是花了一段时间去理解的。
2023-05-19 18:59:09
123
原创 图论小tip
假设这两个点为 x, y。且必须经过点 u 到点 v 这条边,那我们就可以把 x 到 y 的最短路分成三段。题意:给定一个无向带权图,你能使一条边的边权权变为 0,求 n 组点对最短路之和最小值。修改的时候直接对其中一段进行操作就行了。(注意无向图要注意修改的先后顺序)
2023-04-24 17:01:49
103
原创 SA后缀数组
(求sa的算法有倍增法和DC3,因为后者有码量大、常数大等缺点,这里就只记录倍增算法)我们如果对于每个倍增完的二元组,每个都sort一下,复杂度是O(nlog2)的。那么将基数排序应用到其中去,就可以做到O(nlogn)i
2023-02-25 10:23:18
114
原创 K Tokitsukaze and Synthesis and Traits
我们的目的就是在给定的点中找出原图中构成的边数。通过度数低的点向度数高的点建立有向边。用题目给定的条件构造一张图。可以保证每个点的出边。实用的图论小技巧++
2023-01-19 23:06:16
200
原创 分层图笔记
记录一下我第一次系统性地学习分层图(最短路)这种技巧一般用于有某种限制的最短路中这种限制可以是 高速公路,路上任意时刻满足某种条件(较为简单的)egegeg : lg2939, lg4568, lg5340, lg4822也可以是 横向走纵向走之类的(比较有技巧性的)egegeg : lg3831...
2020-11-27 19:31:49
187
原创 单调队列【笔记】
这里主要写一些我在写单调队列优化DP时的一些心得关于单调队列,有个问题一直困扰了我很久headheadhead 和 tailtailtail 的初始化是(head=1,tail=0head = 1, tail = 0head=1,tail=0)还是(head=1,tail=1head = 1, tail = 1head=1,tail=1)让我们来看看这两种情况无非就是当 tail=1tail = 1tail=1 时,队列里已经有了一个空值而当 tail=0tail = 0tail=0 时队列里什
2020-11-04 07:30:45
116
原创 CF 413 E
线段树好题(get新用法)线段树内维护四个值:每段区间左上到右上,左上到右下,左下到右上,左下到右下的最短路struct node { int dis_1, dis_2, dis_3, dis_4; //dis_1 左上到右上 //dis_2 左上到右下 //dis_3 左下到右上 //dis_4 左下到右下 }tree[N << 2];显而易见的 pushup#include<bits/stdc++.h>using namespace std;type
2020-10-29 09:52:32
129
原创 CF 1435 E
如果 a>b∗ca>b*ca>b∗c 怪物的血就可以无限大,也就是输出−1-1−1反之 a<=b∗ca<=b*ca<=b∗c我们把伤害和回血量抽象一下(伤害为白色,回血为黑色)解释一下:1:最后一次伤害打完不回血最优2:第一次伤害一定大于或等于第一段回血量(不然图就会像下面这样,这样显然去掉第一次更优)(假设黑白交替有xxx段,x=a/b/d+1x=a/b/d +1x=a/b/d+1,想想为什么)我们不难发现黑色段,也就是回血量是一段首项为(x−1)∗b
2020-10-26 10:30:55
175
1
原创 ybt 1488 新的开始
不难看出这是一道最小生成树but,我(蒟蒻)一开始以为是取最小的 v[i]v[i]v[i]然后构建最小生成树这样会有一个问题,建造电网有时候不一定会比建造电站更优so~,我们可以把所有建电站的边连到一个虚点上,这样直接进行最小生成树就不会有问题了#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 1e9 + 7;const int N = 310000;int n,
2020-10-26 08:11:49
331
原创 RMQ (ST表)笔记
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAX = 100100;int n, m;int a[MAX], log1[50]; int f[MAX][30];//f[i][j]表示第i个数向后2^j区间内的最大值 inline int read(){ int...
2019-08-05 13:46:51
159
原创 LCA 倍增
预处理出f[i][j] 表示j 点往上走2i 步到达的点。f[0][j]=father[j]f[i][j]=f[i-1][f[i-1][j]]预处理时间复杂度O(n log n)假设我们要求x 和y 的LCA。将x 和y 中深度较大的那个往上跳到和另一个深度相同。再同时向上倍增枚举一个2 的幂的步长2i,若x 往上走2i步与y 往上走2i 步不为同一个点,则将它们同时往上走2i步。...
2019-08-05 12:45:47
126
原创 线段树 笔记
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MAX = 100010;int n, m;ll a[MAX];ll t[MAX * 100],tag[MAX * 100];inline int read(){ int s = 0, w = 1; char ch ...
2019-08-05 11:08:11
101
原创 靶形数独
一道很典型的搜索题就是有个很神奇的方法可以减少搜索时间// 就是从含有0最少的一行开始搜(膜拜某谷大佬) //其实自己做数独的时候应该也会有小伙伴这么做(方便)上代码#include<bits/stdc++.h>using namespace std;const int MAX=10;struct node{ int x; int cnt;}k[MAX];...
2019-07-19 18:45:36
239
1
原创 1312Mayan游戏
范围很小so~~直接暴搜+模拟上代码#include<bits/stdc++.h>using namespace std;const int MAX=10;int len[MAX];//存高度int n;int a[MAX][MAX];int u[MAX][MAX];int vis[MAX][MAX];int b[MAX][MAX][MAX];struct n...
2019-07-19 13:09:39
151
原创 洛谷 1437 扩散
这道题是一道典型的二分//就是判断有点麻烦——蒟蒻题目说:两个点a、b连通,记作e(a,b),当且仅当a、b的扩散区域有公共部分。连通块的定义是块内的任意两个点u、v都必定存在路径e(u,a0),e(a0,a1),…,e(ak,v)。也就是说一个点扩散到另一个点的 时间 就是他们的横纵坐标差值的和(xi-xj)+ ( yi-yi )如果 时间<mid2 就说明两个块连通(注意mid...
2019-07-17 10:47:36
491
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅