随笔分类 -  [0-0]模板与讲解

摘要:树剖的换根分析 (先以1为根建树)在求换根后的$x$的子树的相关信息(最小值为例)时,我们可以这样考虑: ​ 如果现在的根为$r$,当我输入查询$x$的子树分为以下几种情况: 1 .\(x==r\),此时我们要查询的子树的最小值(以$r$为根)就是以1为根时的全局最小值 2 .当$x\quad r$ 阅读全文
posted @ 2020-08-11 17:16 waryan 阅读(198) 评论(0) 推荐(1)
摘要:树链剖分 给$x->y$结点最短路径上所有节点的值都加上$z$ 求$x->y$结点最短路径上所有节点的值之和 给$x$为根节点的子树内所有节点值都加上$z$ 求以$x$为根节点的子树内所有节点值和 P3384 【模板】轻重链剖分 #include <bits/stdc++.h> #define IN 阅读全文
posted @ 2020-08-10 20:31 waryan 阅读(132) 评论(0) 推荐(0)
摘要:LCA \(LCA\)=最近公共祖先。 1.初始化$lg$数组,其代表$lg2+1$。 2.利用倍增的思想去求$fa[u][i]$,在$u$点向上走$2^i$步时的祖先是谁。深度$dep$也同时求出。 3.初始化$fa[u][0]=father$ 4.\(LCA\) int LCA(int x,in 阅读全文
posted @ 2020-08-10 20:29 waryan 阅读(210) 评论(0) 推荐(0)
摘要:迭代加深 在限定的步数内,进行最优化剪枝。 一般题给都会给出限定条件。 P2324 [SCOI2005]骑士精神 #include <bits/stdc++.h> #define INF 0x3f3f3f3f #define DOF 0x7f7f7f7f #define endl '\n' #def 阅读全文
posted @ 2020-08-07 11:41 waryan 阅读(89) 评论(0) 推荐(0)
摘要:单点修改 void update_point(int rt,int x,int k){ if(tree[rt].l==x&&tree[rt].r==x){ tree[rt].k=k; return ; } int mid=(tree[rt].r+tree[rt].l)>>1; if(x<=mid){ 阅读全文
posted @ 2020-07-21 21:27 waryan 阅读(95) 评论(0) 推荐(0)
摘要:高级树状数组讲解:https://www.cnblogs.com/RabbitHu/p/BIT.html 树状数组 一维树状数组 单点修改,区间查询 https://loj.ac/problem/130 #include<bits/stdc++.h> #define INF 0x3f3f3f3f # 阅读全文
posted @ 2020-07-20 19:28 waryan 阅读(138) 评论(0) 推荐(0)
摘要:卢卡斯定理 求组合数: 模板题:P3807 【模板】卢卡斯定理:https://www.luogu.com.cn/problem/P3807 #include<bits/stdc++.h> #define INF 0x3f3f3f3f #define DOF 0x7f7f7f7f #define e 阅读全文
posted @ 2020-07-18 19:49 waryan 阅读(100) 评论(0) 推荐(0)
摘要:容斥原理 \[ |A_1\cup A_2\cup A_3 \cup \cup \cup A_n|=\sum_{i=1}^n{|A_i|}-\sum_{1\leq i\leq j\leq n}{|A_i\cap A_j|}+\quad+(-1)^r|A_1\cap A_2\cap A_3\cap\qu 阅读全文
posted @ 2020-07-18 17:58 waryan 阅读(88) 评论(0) 推荐(0)
摘要:最短路分层图 在最短路中由于各种条件的限制会导致建图的时候会建成分层图 分层图中将限制条件给消除,变成普通的单元最短路问题。 链接:https://ac.nowcoder.com/acm/problem/26257 来源:牛客网 题目描述 小雨所在的城市一共有 mmm 条地铁线,分别标号为 1 号线 阅读全文
posted @ 2020-07-17 18:07 waryan 阅读(190) 评论(0) 推荐(1)
摘要:链式前向星 $next$指的是上一条同起点边的位置,$to$表示这条边的终点,$val$表示边权。 $u、v、val$分别表示起点,终点,边权。 $head[x]$存以$x$为起点的,最后加入的边的位置$edge[head[u]]$ struct node{ int next,to,val; }ed 阅读全文
posted @ 2020-07-17 14:49 waryan 阅读(247) 评论(0) 推荐(2)
摘要:最长上升子序列 动态规划O(\(n^2\)) $dp[i]$表示以第$i$个数结尾的最长上升子序列的长度 容易找到状态转移方程: ​ \(dp[i]=max(dp[i],dp[j-1])\) for(int i = 1; i <= n; ++i) { for(int j = 1; j < i; ++ 阅读全文
posted @ 2020-07-15 23:30 waryan 阅读(94) 评论(0) 推荐(1)
摘要:01分数规划 01分数规划问题是求性价比问题,比如说给出总价值和总花费让你求其二者比值的最大值 假设价值为$a[i]$,花费为$b[i]$,求: \[ \frac{\sum a[i]}{\sum b[i]}=ans \] 求其$ans$的最大值。 我们移项发现: \[ F(ans)=\sum a[i 阅读全文
posted @ 2020-07-15 17:49 waryan 阅读(179) 评论(0) 推荐(1)
摘要:树状数组模板: int d[maxn];int n; inline int lowbit(int x){return -x&x;} int get_sum(int x){ int ans=0; while(x){ ans+=d[x];x-=lowbit(x); } return ans; } voi 阅读全文
posted @ 2020-07-15 17:08 waryan 阅读(101) 评论(0) 推荐(1)
摘要:概要: 进行拓扑排序是从入度为0的入手依次排序。 无等于条件排序 直接进行拓扑排序 含等于条件排序 先对等于条件进行并查集合并然后拓扑排序,且排序的时候注意存边时存的是父节点(需要Find一下) 模板: vector建图 const int maxn = 3e4+10; int deg[maxn]; 阅读全文
posted @ 2020-05-07 17:35 waryan 阅读(137) 评论(0) 推荐(1)
摘要:Aizu ALDS1_6_D Minimum Cost Sort 直接排序太简单了,我们来考虑一下排序的代价,对于一个长度n的由非负整数组成的数组,我们用交换法排序,每次可以交换任意两个元素,而交换的代价,是这两个元素之和,求出排序的最少交换代价,保证数组里没有两个元素相同且元素值小于等于10000 阅读全文
posted @ 2020-04-03 18:21 waryan 阅读(829) 评论(0) 推荐(1)
摘要:Manacher算法-又叫马拉车算法 概要: Manacher算法主要用于求最长回文串,在求最长回文串的时候做了处理使长度均变成了奇数 处理方式:s[0]='$',从s[1]开始两边都有其他符号 然后用一个数组 P[i] 来记录以字符S[i]为中心的最长回文子串向左/右扩张的长度(包括S[i],也就 阅读全文
posted @ 2020-04-01 18:56 waryan 阅读(451) 评论(0) 推荐(1)
摘要:一:Kmp算法 概要: Kmp算法中nxt数组为重要组成部分,nxt数组所存的内容为:next[i]表示前i个字符组成的子串的最长相同前缀和后缀的长度,要注意应用中提出的nxt[i]变化(方便在匹配两个字符串时候跳动减少时间复杂度) nxt数组模板: 以i=1为起点的字符串进行处理 void get 阅读全文
posted @ 2020-04-01 18:47 waryan 阅读(151) 评论(0) 推荐(1)
摘要:同构图:图论当中的术语,假设G=(V,E)和G1=(V1,E1)是两个图,如果存在一个双射m:V→V1,使得对所有的x,y∈V均有xy∈E等价于m(x)m(y)∈E1,则称G和G1是同构的,这样的一个映射m称之为一个同构,如果G=G1,则称他为一个自同构 HDU3926-Hand in Hand 解 阅读全文
posted @ 2020-03-28 21:01 waryan 阅读(509) 评论(0) 推荐(1)
摘要:一:Prim算法 void prim(int src)//prim算法是根据点来连接的寻找n-1个点 { int i,j,k,tmp; ll sum=0; for(i=1;i<=n;++i) dis[i]=mt[1][i],vis[i]=0;//初始化距离,标记清0 vis[1]=1;dis[1]= 阅读全文
posted @ 2020-03-24 15:39 waryan 阅读(203) 评论(0) 推荐(1)
摘要:一:dijkstra模板(n2) int dis[maxn],vis[maxn]; void dijkstra(int src) { int i,k,j,tmp; for(i=1;i<=n;++i) dis[i]=mt[src][i],vis[i]=0; dis[src]=0; vis[src]=1 阅读全文
posted @ 2020-03-24 15:11 waryan 阅读(215) 评论(0) 推荐(1)