自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 X I E

xie

2022-04-10 19:24:06 313

原创 网络流建模题目

P4043支线剧情题意:每一条边至少要被走一次用的最小费用是多少该题很明显是需要求这张图的最小费用可行流(就是满足所有边的流量上下限制,同时费用最小)该题用的上下界无源汇网络流,每条边的下界为1,上界为inf费用就为所消耗的时间对于原图中每一个点(包括源汇)u,令d[u]代表u点的所有入边的流量下界减去出边的流量下新建完图流量是不守恒的,所以我们需要补流如果d[u]是负数,那么从u连一条边(u,T,0,-d[u])到T如果d[u]是正数,那么从S连一条边(S,u,0,d[u])到u其中每个

2022-03-22 21:15:12 3260

原创 DSU on tree树上启动式合并

如果存在的话,我们之间修改根节点,然后删除整个子树的影响(因为这个点一定会修改,相当于直接把这个子树砍掉,给这个点打上一个标记),然后回溯继续dfs;给一个树,树上每个顶点都有一个权值,我们可以每次操作可以把一个点的点权值修改成任意值,问至少修改多少次才能不存在一条路径使得路径的异或和0。对于每个节点,如果我们依次处理每个子树看看子树中的链能产生多少种异或和(用set维护),每次处理完子树后判断一下是否存在。(某个之前子树能产生的链的异或和)^ w[u] ^ (当前子树能产生的链的异或和)==0;...

2022-07-22 15:32:35 100 1

原创 树链剖分题单

即二分权值最大的路径的权值最小值,设为mid,只要满足所有路径长度>mid的路径同时减去一条边权后的值mid的边都经过,且这条被删去的边要最长。2u不是rt的祖先,即u不在1->rt这条路径上,无所谓,直接按u为根的子树返回。3u是rt的祖先,即u在1->rt这条路径上,最特殊的情况。就会发现rt为根时,u子树覆盖不到的地方是v及v的子树。一定是动态开点,如果建10^5的线段树内存早就爆了。找到路径u->rt上的u的直系儿子v,...

2022-07-13 22:49:16 138

原创 P4137 Rmq Problem / mex权值线段树

从左往右扫一遍,建立r棵线段树,在权值线段树(要可持久化一下)上修改当前权值对应的“最后一次出现的位置”为当前位置。二维数点问题题目入口

2022-07-09 16:13:25 105

原创 笛卡尔树! ST表!莫队

板子P5854 【模板】笛卡尔树ST表模板题+板子

2022-07-04 10:24:17 109

原创 图论之欧拉回路

欧拉回路:终点就是起点一、无向图1 存在欧拉路径的充要条件 : 度数为奇数的点只能有0或2个2 存在欧拉回路的充要条件 : 度数为奇数的点只能有0个二、有向图1 存在欧拉路径的充要条件 : 要么所有点的 出度=入度;要么除了两个点之外,其余所有点的 出度=入度剩余的两个点:一个满足出度-入度=1(起点) 一个满足入度-出度=1(终点)2 存在欧拉回路的充要条件 : 所有点的出度均等于入度1 无向图所有点的度数必须是奇数所有边连通2 有向图所有点的入度等于出度所有边连通【模板】欧拉路径

2022-06-30 11:26:40 2619

原创 图论之联通分量

每种连通分量用的tarjan都不一样,并且缩点的方式也不一样。割点:就是去点该点,则这个图变得不连通,这个点就是割点。矿场搭建题意:就是每个矿口都有很多个出口,当某个点崩塌时,要保证所有矿口都有出口,所以让你最少要建造多少个出口。明显的点双联通分量题,但是也挺恶心的用tarjan跑出割点并且缩点然后计算每个连通块的割点数量,下面分类讨论。割边:又叫做桥,去掉这条边使得图不连通[USACO06JAN]Redundant Paths G这题求的是边双联通分量;题意:给定一个连通的无向图让你进行加边操作,

2022-06-27 21:11:08 186

原创 图论之分层图

分层图

2022-06-25 10:33:22 1189

原创 CF 日常1200

CF

2022-06-13 11:13:22 177

原创 (manacher)马拉车算法专题题目

manacher算法用来求解回文串问题,时间复杂度为O(n).不懂的先可以去练习下模板板子题,求最长回文串传送门P3501 [POI2010]ANT-Antisymmetry这一题他给的是一个新的定义“反对称”字符串:如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串。比如00001111和010101就是反对称的,1001就不是。我们可以了利用0/1的性质,由于0/1始终不能与自己相反,故子串并不存在中央位置,我们只能从自己添加的特殊符号’#'的奇数位上找,差不多

2022-04-19 21:25:19 491

原创 字符串的。

AC自动机板子题#include<bits/stdc++.h>using namespace std;const int N=3000010;int tr[N][27],fail[N];int n,m;char s[N];map<int, int> vis;int pos[N];int num[N],tot;int q[N];void in(char s[],int idx)//建立trie{ int u=0,len=strlen(s); f

2022-04-15 16:26:35 66

原创 网络流之最大流

网络流的基本概念在一张有向图中 G = (V, E) 中有一个源点 S 和一个汇点 T。源点 S 有无限多的水流可以向外流出,汇点 T 可以接受无限多的水流。其中对于每一条有向边有一个边权代表这条有向边最大可以流过的流量(用 c(u, v) 来表示)。最大流指的是最大可行流残留网络然后每一个流都会有一个残留网络残留网络指的是在原网络中指定了可行流之后对应的一个网络流,原网络的一个可行流对应一个残留网络。该红色箭头的所指路径即为残留网络其中的其中残留网络的可行流 f’ 同样需满足流量守

2022-03-20 20:01:29 260

原创 splay的一些操作

秦同学的详细版本splay就是一种将树上的一个节点经过旋转到节点的一种操作,来保持树的平衡splay本质:二叉搜索树特点:结点x的左子树权值都小于x的权值,右子树权值都大于x的权值如果当前处于共线状态的话,那么先旋转y,再旋转x.这样可以强行让他们不处于共线状态,然后平衡这棵树.如果当前不是共线状态的话,那么只要旋转x即可.普通平衡树基本上每个平台都有的模板题。为什么要splay?仅仅是插入不是插进去就行吗?成不成为根节点有什么关系?这是为了查找比x小/大的第一个数做铺垫,因为有可能x

2022-02-22 16:55:31 429

原创 可持久化线段树(主席树)+ treap 学习笔记

可持久化线段树(主席树)可持久化概念:可持久化实质上就是存储该数据结构所有的历史状态,以达到高效的处理某些信息的目的。问题:题目链接:给定长度为N的序列A,有M次询问,求在[l,i]区间内第k小的数是多少。做法:由题意知道我们肯定要对区间进行排序,但是我们的排序不是每次询问才排序,是初始化就排序并离散化——针对数字较大但数据不大的情况下排序离散化完毕后,以离散化数组建主席树,设ii属于区间[1,n],对原数组的[1,i]区间的数做统计(例如下图,区间中按离散化数组顺序统计1的个数、2的个数、3的

2022-01-19 01:05:20 132

原创 树状数组,线段树学习笔记

树状数组解决的问题:区间求和;主要模板int lowbit(int x){ return x & -x;}void add(int x,int c)//修改单点值{ for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=c;}int sum(int x){ int res=0; for(int i=x;i;i-=lowbit(i)) res+=tr[i]; return res;}还可以当做差分数组思

2022-01-11 21:53:46 88

原创 鸣人和佐助

题目思路:bfs我们可以用三元组来存储鸣人所在的位置和查克拉数量x,y,t;#include<bits/stdc++.h>using namespace std;const int N=210;char g[N][N];int n,m,t;typedef pair<int,pair<int,int>> plll;plll q[N*N];int f[N][N][11];bool st[N][N][11];int dx[4]={0,1,0,-1};

2022-01-10 22:11:19 339

原创 海贼王之伟大航路

经典的哈密顿最短路径问题。思路: 状态压缩DP,用二进制来表示我们到达过得点的集合;所以我们可以用二维数组来表示f[i][j];例如:f[3][j] ,3=0101,所有从0走到j;#include<bits/stdc++.h>using namespace std;const int N=16;int w[N][N];int n,m;int f[1<<N][N];int main(){ while(~scanf("%d",&n)) {

2022-01-10 14:46:26 272

空空如也

空空如也

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

TA关注的人

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