自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 使用lua脚本操作redis

:监视一个或多个键,如果在事务执行之前被修改,则事务被打断。缺点:乐观锁实现,所以失败需要重试,增加业务逻辑的复杂度,所以一般使用第二种方法。redis 能确保事务执行前后的数据的完整约束。事务是一个不可分割的工作单位,事务中的操作要。事务的前后,所有的数据都保持一个一致的状态,DISCARD:取消一个事务,放弃执行事务中的所有命令。中的某个命令在执行期间出现了错误,整个事务也会继续执行。这里的一致性是指预期的一致性。下去,直到将事务队列中的所有命令都执行完毕为止。MULTI:标记一个事务的开始。

2023-07-25 16:45:49 905

原创 红黑树的原理及代码实现

红黑树的原理这篇博文讲解的很详细了,不熟悉红黑树的定义可以看看:红黑树的详细原理讲解咱们直接进入代码实现讲解:创建一棵红黑树,先从创建红黑树的节点开始:1.红黑树首先是一个二叉树,所以需要一个左儿子节点的指针,右儿子节点的指针2.红黑树是有BALCK和RED两种颜色的,所以每个节点应该有颜色3.红黑树是Key-Value存储的4.因为之后要进行旋转等调整,所以还需要一个父节点的信息所以红黑树节点定义如下:2.创建红黑树整体结构红黑树有五个性质:为了方便整棵红黑树的维护,我们默认叶子节点是空

2023-06-28 11:40:05 1137

原创 最大流判定(星际转移问题)

一种方式是坐公交车,从一个站点到另一个站点,那么就可以根据每辆公交车的路线来建边,假设某一辆公交车最开始在第 0 个站点,然后依次开往第 2 个站点,再开往第 5 个站点,那么先从第 0 天的第 0 个站点向第 1 天的第 2个站点连一条边,再从第 1 天的第 2 个站点向第 3 天的第 5 个站点连一条边,容量都是这个公交车的人数上限,其他路线依次类推。可以发现可行解中每个人行走的方式都能对应到流网络中的某一条边,只需要根据该方式移动的人数来设置对应的边的流量,就能得到对应的可行流,反过来同理。

2022-11-15 15:24:04 327 1

原创 acwing 恨7不成妻

注意完全平方公式的推导。

2022-10-22 21:33:55 121

原创 有汇源上下界最大流和最小流

代码】有汇源上下界最大流。

2022-08-11 10:07:48 87

原创 无源汇上下界可行流

代码】无源汇上下界可行流。

2022-08-10 20:53:26 125

原创 最大流圆桌问题(二分图多重匹配问题)

考虑建图,设置源点S为0,汇点T为n+m+1,源点向所有单位连其容量的边,每个单位向圆桌连1的边,每个圆桌向源点连圆桌的容量的边,可知符合网络流的容量限制和流量限制,其最大流就是合法方案之一。...

2022-08-10 15:15:11 119

原创 树链剖分模板

代码】树链剖分模板。

2022-08-07 18:52:14 129

原创 Hierholzer算法dfs找欧拉回路模板

代码】dfs找欧拉回路模板。

2022-08-02 19:45:57 232

原创 杭电计算几何

代码】杭电计算几何。

2022-07-27 21:10:20 76

原创 tarjan求强连通分量

原理看:1推导过程看:2模板

2022-07-05 17:30:34 118

原创 daimayuan 三进制循环(树形dp)

题目传送门这个题目比较简单,思路一下就出来了。维护两个dp,dp1和dp2:dp,dp1和dp2:dp,dp1和dp2:dp1[i]:以点i为起点以及子树符合取模递增的最大长度dp1[i]:以点i为起点以及子树符合取模递增的最大长度dp1[i]:以点i为起点以及子树符合取模递增的最大长度dp2[i]:以点i为起点以及子树符合取模递减的最大长度dp2[i]:以点i为起点以及子树符合取模递减的最大长度dp2[i]:以点i为起点以及子树符合取模递减的最大长度答案就是:ans=max(ans,Σ(dp1

2022-05-21 14:07:52 114

原创 二维偏序问题应用(二维数点)

二维偏序问题的数学解答将二维数点问题转移为二维偏序问题来做,CDQ分治主席树也可以做,但是本人太菜,只会树状数组做法:无需离散化写法:(注意询问数组开四倍,树状数组0没有意义+1)例题:园丁的烦恼#include <bits/stdc++.h>using namespace std;#define x first#define y second# define rep(i,be,en) for(int i=be;i<=en;i++)# define pre(i,be,en

2022-05-12 16:07:58 486

原创 CF一个远古时期的计算几何题(正多边形)

第一次正式写计算几何,知道了fmod这个东西,知道了外接圆的圆心角的最小份由以三角形三条边每个弦为圆心角的最大公约数。看带佬的题解:详细的题解原题链接#include <bits/stdc++.h>using namespace std;#define x first#define y second# define rep(i,be,en) for(int i=be;i<=en;i++)# define pre(i,be,en) for(int i=be;i>=en;

2022-05-09 21:20:30 161

原创 并查集。。

题目链接我的另外的解LCA倍增思想其实只要并查集维护成森林每个树都是单色的,同色有边就连在一个连通集里面,查询时,如果两个点在同一个树,而且树颜色符合查询的颜色,或者两个点不在同一个树上,必定是经过了查询的颜色的/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-05-04 21:00 说明:***

2022-05-04 21:46:44 152

原创 倍增LCA受到启发的一题

倍增过程中可以吧,这里的 fa数组可以推广一下,保存每个点往根方向的路径上各个边/点的性质。常见的维护值有路径长度(树上求最短路)以及点的特殊性质(比如本题中各个农场的奶牛种类)等。这里维护的数组dp[i,j,op](op=1或者op=0)dp[i,j,op] (op=1或者op=0)dp[i,j,op](op=1或者op=0)维护的是i点往树根方向走2j步经过没经过opi点往树根方向走2^j步经过没经过opi点往树根方向走2j步经过没经过op转移方程为:dp[i,j,op]∣=(dp[i,j−1,o

2022-05-04 20:17:19 156

原创 倍增在线求LCA

acwing祖孙询问倍增求最近公共祖先,实际上是对暴力的优化(向上标记法)我们来看看向上标记法的实现://预处理每个结点的深度,以及结点的父结点的编号void dfs(int u, int father){ depth[u]=depth[father]+1; fa[u]=father; for(int i=h[u];~i;i=ne[i]){ int v=e[i]; if(v!=father) dfs(v,u); }}//求u和v的

2022-05-04 11:39:28 142

原创 Tarjan算法求LCA(最近公共祖先)

acwing祖孙询问此题用倍增在线查询更好,我只是练练Tarjan算法的手,倍增时间复杂度为O(nlongn),查询O(logn),tarjan离线lca算法O(n+q)O(nlong_n),查询O(log_n),tarjan离线lca算法O(n+q)O(nlongn​),查询O(logn​),tarjan离线lca算法O(n+q)Tarjan算法原理:这个博客写的很好#include<bits/stdc++.h>using namespace std;const int N=4e4+

2022-05-03 20:34:42 615

转载 no crossing 代码源div1每日一题(区间dp)

no crossing大佬题解/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-05-01 20:13 说明:*********************************************************************/#include <bits/stdc++.

2022-05-01 21:03:50 265

原创 daimayuan#436. 子串的最大差(单调栈)

/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-04-30 00:10 说明:*********************************************************************/#include <bits/stdc++.h>using names

2022-04-30 10:00:55 213

原创 daimayuan 国家铁路(前缀和,dp)代码源

1.首先答案必定为 A[x1,y1]+A[x2,y2]+C∗(∣x1−x2∣+∣y1−y2∣)A[x1,y1]+A[x2,y2]+C*(|x1-x2|+|y1-y2|)A[x1,y1]+A[x2,y2]+C∗(∣x1−x2∣+∣y1−y2∣)2.我们想办法去掉绝对值,给选择的两个点规定方向,分别是一个点在左下,一个点右上;一点左上,一个点右下(方向是两个点的相对方向)。1.当左下右上时,维护 m1[i][j]m_1[i][j]m1​[i][j] 为左下角到i,ji,ji,j的最小的 C∗(i−j)+A[

2022-04-29 00:58:55 153

原创 孤独的树(牛客月赛)

小白月赛最后一题,树形dp有两种方式做,第一种思维要求高一点,第二种代码麻烦一点。解法一:从树形结构自下而上观察本问题(上指的是树根,下指的是叶子)。某个节点,与其子节点有公共的最大公因数,两个节点中必须要有一个要删除他们的最大公因数,删那个的对结果的贡献都是最大公因数的质数组成数。,那么我们删哪一个呢,我们删父节点,删了父节点之后,因为我们是从叶子节点看起,删了父节点,这个gcd的影响就传不到父节点的父节点去了,而且还防止了删了这个子节点的gcd,别的子节点和父节点还有gcd或者这个gcd的因子所

2022-04-26 21:13:22 304

原创 daimayuan(代码源oj)最长路径(树形dp,无向树换根dp)

题目传送门/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-04-14 19:16 说明:*********************************************************************/#include <bits/stdc++.h>usin

2022-04-16 10:45:14 2318

原创 流(树形dp,换根dp)

前置知识看这里注意父亲节点为叶子节点的情况就行了/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-04-13 23:47 说明:*********************************************************************/#include <bi.

2022-04-14 11:00:28 71

原创 距离和(换根dp)

传送门/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-04-13 23:47 说明:*********************************************************************/#include <bits/stdc++.h>using n

2022-04-14 10:13:20 91

原创 (2021 ICPC)亚洲区域赛(昆明)I.Mr. Main and Windmills

题目题目大意:坐火车从s到t,经过了许多风车。火车在一条直线上行驶。随着火车的行驶,风车在的视野里会发生位置相对变化。现在给出风车们的坐标,请你找到当第h个风车与其他风车的相对位置变化k次时火车所在的坐标。思路:只需要取风车坐标两两之间直线和s到t线段的交点然后排序就好了.#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 10;typedef pair<double, double> PD

2022-04-13 11:49:24 174

原创 凸多边形的划分(区间dp)

题目传送门#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N=100,INF=1LL<<63,M=500;ll f[N][N];int n;ll a[N];bool cmp(vector<ll>& a,vector<ll>& b){ while(a.size()&&a.back()==0) a.pop

2022-04-12 11:25:48 171

原创 daimayuan 三回文序列(代码源)

实现方法:1.先二维前缀将每个数字的前缀和保存,再保存他们前缀增加时候的位置(last数组维护)。2.然后枚举从1~26的左边=右边长度(k1k1k1),然后找到他们前缀有k1k1k1个x(范围1−26)x(范围1-26)x(范围1−26),后缀有 k1k1k1 个xxx的下标,然后中间找最大k2k2k2长度,记录最大值即为答案,时间复杂度O(m∗n)O(m*n)O(m∗n).3.详情看注解。/*****************************************************

2022-04-11 11:42:01 165

转载 Educational Codeforces Round 96 (Rated for Div. 2) E题(逆序对)

思路但是我的代码感觉更好/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-04-07 22:40 说明:*********************************************************************/#include <bits/stdc++.h&g

2022-04-08 11:45:30 57

原创 子串分值和(蓝桥杯C组)

首先我们要弄清楚,所有f[i..j]f[i..j]f[i..j]之和,即对于每个下标的字符包含这个下标的字符的子串之和,还要加一点限制,选择的子串只能有一个这个下标的字符。(1).当选择一个子串时,如果重复选择了一个字符,那么这个字符的对答案的贡献变为0,否则只有一个这个字符,对答案的贡献为1。比如f["ab"]=2,但f["aba"]=1。因为‘a’重复选取了f["ab"]=2,但f["aba"]=1。因为‘a’重复选取了f["ab"]=2,但f["aba"]=1。因为‘a’重复选取了再来一个例子.

2022-04-06 22:51:55 1809 2

原创 daimayuan 代码源大富翁游戏

线段树基础题,动态在线维护区间最大值和最小值,一发过/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-04-06 14:55 说明:*********************************************************************/#include <bi

2022-04-06 17:10:54 205

原创 daimayuan 括号序列(dp)

传送门使用记忆化搜索/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-04-05 19:47 说明:*********************************************************************/#include <bits/stdc++.h>

2022-04-06 00:36:48 434

原创 抽屉原理O(n)求最大间隙问题

转载博客:传送门/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-04-04 19:00 说明:*********************************************************************/#include <bits/stdc++.h>us

2022-04-04 23:39:32 81

原创 小国王(状压dp经典题)

#include <bits/stdc++.h>using namespace std;int n, m;const int N = 15;long long dp[N][1100][1 << 13]; //目前的行 选了多少个 目前状态vector<int>v;//每行压缩航的合法状态int check(int x){ int res = 0; for (int i = 0; i <= 31; i++) { if (x >>

2022-03-29 13:23:09 69

原创 走楼梯2(Daimayuan Online Judge)

这题我的解法是使用状态机思维且看我下面的状态关系图:这是我给出的三个状态,走一步用0状态表示,走一次两步用1状态表示,走两次两步用状态2表示,他们的转移关系如图对图的解释:1.走一步怎么转移过来的:可以选择继续走一步转移过来(如图中的自环);走两步无论第一次还是第二次走两步,可以下一次走一步。2.走一次两步怎么转移过来的: 可以走一步后选择走两步。3.连续走两次两步怎么转移过来的: 可以走一次两步后再接着走两步。1.状态定义定义f[i,j]f[i,j]f[i,j],iii 为此时是第几个台阶

2022-03-28 22:00:52 390

原创 树上染色(树形dp)

参考大佬题解:树上染色原题:洛谷树上染色/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-03-27 17:35 说明:*********************************************************************/#include <bits/st

2022-03-27 19:28:59 380

原创 牛牛的计算机内存(状压dp)

题目大意:​每次选择一条指令直到被选完为止,每次选择一条指令的花费为这条指令里面有多少个之前没有被选的内存k,花费加k2k^2k2,求最后的花费最小。​​1 .n<=20n<=20n<=20选择情况有1<<n−11<<n-11<<n−1种,使用状态压缩。​2.dp[i]:ip[i]:ip[i]:i为此时1-n条指令里面的选择情况,dp[i]dp[i]dp[i]为最小花费。vis[i]vis[i]vis[i]: i为此时1−n条指令里面的选

2022-03-27 12:43:03 347

转载 容斥原理求区间内与k互质的数个数

/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-03-09 19:08 说明:*********************************************************************/#include <bits/stdc++.h>using names

2022-03-09 19:32:45 161

原创 宇宙人浇花(异或前缀和+trie+思维,最大异或对问题)

题目传送门1.题目大意:a序列的n个数异或和为:a1a1a1 xor a2a2a2 xor a3a3a3 xor a4a4a4…xor ananan可以对一段连续的al..aral..aral..ar加一,操作一次或者不操作,求操作之后的n个数的异或和2.分析题目:最后一定是前面一部分不加一,中间一部分加一,后面一部分不加一,注意每部分可能长度为0维护两个前缀数组:1.b[i]维护前i个a[i]+1的异或和b[i]维护前i个a[i]+1的异或和b[i]维护前i个a[i]+1的异或和2.a[i

2021-12-08 13:48:58 327

原创 1611F - ATM and Students详细题解(*1800,线段树维护前缀和;双指针算法(思维))

1611F - ATM and Students题目大意:给你一个数组a,找到最大连续段[l,r][l,r][l,r]:al+al+1+...+ar+s>=0al+al+1+...+ar+s>=0al+al+1+...+ar+s>=0 (条件1)al+al+1+...+ar+s<0al+al+1+...+ar+s<0al+al+1+...+ar+s<0 (条件2)或者l到n都满足al+al+1+...+an+s>=0l到n都满足al+al+1+...+

2021-12-03 16:29:51 743

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除