![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
题解
文章平均质量分 90
某typedef
这个作者不懒,什么都没留下…
展开
-
树形DP&环形和后效性处理
树形dp概念依然是O(n)O(n)O(n)类型的dp,通过dfs或bfs实现小状态向大状态的转移,本质是在树上更方便表示的线性动规例题P2014 [CTSC1997]选课是做过的题,就不详细说了树上的分组背包POJ3585从树上选取一个源点作为根,每条边都有一个容量,该树对应的叶子结点为汇点问应当选取哪个点为源点,该树的流量最大朴素算法:枚举每个点作为源点,用树形dp求出最大流量也就是从下往上取mind[x]表示以xxx为根的子树所得的最大流量d[x]=∑y∈son(x){mi原创 2021-05-31 21:48:56 · 172 阅读 · 0 评论 -
莫队
莫队优雅的暴力用法在nnn\sqrt{n}nn的时间内离线求解一段区间内不同数字的个数实现暴力做法:用一个桶记录每种颜色出现的数量随后扫描桶,进行统计显然会超时我们对询问进行排序,以便利用前一个询问的信息更新下一个询问我们建立双指针,每次移动指针加入新数这便是莫队算法的雏形(是暴力,但不优雅)很容易发现我们刚才的做法仍然是O(n)O(n)O(n)的,并没有得到优化通过调整查询的顺序,我们可以把复杂度降到O(n)O(\sqrt{n})O(n)我们通过排序,可以使得其中一个指针原创 2021-03-08 19:03:38 · 182 阅读 · 0 评论 -
数学基础知识
数学基础知识线性筛略高斯消元通过高斯消元,我们可以再O(n3)O(n^3)O(n3)的时间复杂度内求出线性方程组的解{a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋮an1x1+an2x2+⋯+annxn=bn\begin{cases}a_{11} x_1+a_{12}x_2+\dots+a_{1n}x_n=b_1\\a_{21} x_1+a_{22}x_2+\dots+a_{2n}x_n=b_2\\\vdots\\a_{n1} x_1+a_{原创 2021-03-06 22:06:24 · 217 阅读 · 0 评论 -
2-SAT
2-SAT引入我们有很多个变量,分别为x1,x2,…,xnx_1,x_2,\dots,x_nx1,x2,…,xn每个变量有真假两种情况我们有几个条件,由几个变量或起来,可以添加非,如:x1∪x2∪x3x_1∪ x_2∪ x_3x1∪x2∪x3¬x2∪¬x3∪x4\neg x_2∪\neg x_3∪ x_4¬x2∪¬x3∪x4在SAT问题中,我们求出这些变量的取值,满足许多个这样的条件然而不幸的是,SAT问题是一个NPC问题,我们没有办法在多项式时间内求出解不过,对于2原创 2021-03-05 21:32:02 · 88 阅读 · 0 评论 -
Tarjan
重学图论前置芝士强连通:对于点x,y,存在一条x到y,和y到x的路径强连通图:图中每两个点都强联通强联通分量:极大强联通子图都是定义在有向图中的应用:缩点我们对一张图进行DFS,可以得出一颗搜索树对于搜索树上的每一条边,我们都可以归为四类:树枝边(x,z):x是y的父节点前向边(x,y):x是y的祖先节点后向边(x,y):就是前向边反过来横叉边(y,a):连向其他树枝的边(需要注意的是,(y,b)并不是一条横叉边,因为b节点是第一次被访问到,因此就成了树枝边)原创 2020-12-18 22:19:58 · 159 阅读 · 2 评论 -
AcWing1321取石子
题意A(Alice)A(Alice)A(Alice)和B(Bob)B(Bob)B(Bob)在玩取石子游戏共NNN堆石子排成一排,A和B轮流进行如下操作(A是先手):从某堆石子中取走一个合并任意两堆石子无法进行操作的人输让你判断A是否有必胜策略有多组测试数据哦思路假设:我们当前所有堆得石子个数都严格大于1我们令 b=堆数+石子总数-1此时先手必胜⟺\Longleftrightarrow⟺ b是奇数为什么呢?每个操作一会使石子总数减一二每个操作二会使石子堆数减一因此b就是操作总原创 2020-12-03 21:14:26 · 182 阅读 · 0 评论 -
可持久化数据结构
文章目录可持久化数据结构两句闲话可持久化 TrieTrieTrie实现例题可持久化线段树(主席树)实现例题可持久化数据结构两句闲话可持久化的前提:该数据结构本身的拓扑结构在操作时保持不变常见的可持久化:堆,线段树,树状数组,trie…trie\dotstrie…常见的不支持持久化:平衡树…那么可持久化能解决什么问题呢?保存数据结构的所有历史版本 git暴力备份?肯定不行 MLE+TLE类似于git,可持久化数据结构只会记录每一个版本和前一个版本不一样的地方以线段树为例,每次操作最多原创 2020-11-27 21:35:52 · 308 阅读 · 0 评论 -
树状数组复习
文章目录树状数组复习功能原理操作初始化修改查询应用题意思路代码进阶玩法区间修改,单点查询思路代码区间修改,区间查询思路代码树状数组复习功能快速求前缀和 O(logn)O(logn)O(logn)快速修改某数 O(logn)O(logn)O(logn)原理二进制拆分x=2ik+2ik−1+⋯+2i1x=2^{i_k}+2^{i_{k-1}}+\dots+2^{i_1}x=2ik+2ik−1+⋯+2i1ik≥ik−1≥⋯≥i1i_k \geq i_{k-1} \geq \dots \原创 2020-11-21 22:47:55 · 135 阅读 · 0 评论 -
拓扑排序
概念“对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。”——《百度百科》上面这一段已经说得很清楚了对于一个有向图,我们需要确定他节点的顺序,使得它的所有出边指原创 2020-11-17 22:37:40 · 105 阅读 · 0 评论 -
AcWing344. 观光之旅
link代码&思路/************************************************************************* > File Name: p344观光之旅.cpp > Author: typedef > Mail: 1815979752@qq.com > Created Time: 2020/11/16 21:09:16 ******************************原创 2020-11-16 22:03:49 · 62 阅读 · 0 评论 -
传递闭包
概念“传递闭包、即在数学中,在集合X上的二元关系R的传递闭包是包含R的X上的最小的传递关系。” ——《百度百科》人话 : 建立传递闭包的过程,就是给定一个有向(无向)图,对于节点 i 和节点 j ,如果他们联通但不直接相连,我们就建一个 i 到 j 的边.求法我们可以用 Floyd 算法在 O(n3)O(n^3)O(n3) 的时间内求得传递闭包我们用 d(i,j) 表示原图 , g(i,j) 表示它的传递闭包g(i,j) 是一个无权图,若从 i 出发,可以到达 j 则为 1 ,否则为 0初始原创 2020-11-13 22:37:10 · 7945 阅读 · 0 评论 -
P1522 [USACO2.4]牛的旅行 Cow Tours
link代码&思路#include<bits/stdc++.h>#define x first#define y second//保险起见别用defineusing namespace std;typedef pair<int,int> pii;const int N=152;const double inf=1e20;int n;char g[N][N];pii q[N];//保存坐标double d[N][N],maxd[N];//d是邻接矩阵,m原创 2020-11-13 21:41:32 · 193 阅读 · 1 评论 -
P2872 [USACO07DEC]Building Roads S
link思路整理没啥难的…就一裸的最小生成树开始的时候建一个完全图然后把已有的边代价设为零跑一边Kruskal就行了注意 : 边数一定要开到N*(N-1)/2+1,因为是完全图,否则会爆RE还有就是记得开double代码/*数组没开够,爆零两行泪ll开成 int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪空间原创 2020-11-05 21:13:11 · 183 阅读 · 0 评论 -
洛谷 P1040 加分二叉树
link思路整理中序遍历有一个很重要的性质,就是一颗树的中序遍历 [L,R] 的一个连续的子区间,一定对应它的一颗子树,我们用 [L,K] 表示自然,这颗二叉树的子树就是 [L,K-1],[K+1,R] (根节点 K )然后,对于每个区间我们都要枚举 k ,以便求出最大得分很容易想到,f[l][r]=max{f[l][k-1]*w[k]*f[k+1][r]}于是,难点就在于怎样求出该方案 (答案不唯一,建议SPJ)可以用 g[l][r]表示区间 [L,R] 对应的根节点,来记录每次的决策这原创 2020-11-03 22:19:59 · 154 阅读 · 0 评论 -
AcWing 1069. 凸多边形的划分
link思路整理乍一看好像没什么思路,但是不难看出每次找一个点,就会把当前区间分成两半,分开求两个区间在加上断开的代价就是整个区间的代价了那就区间dp呗(见下图)我们用f[L][R]表示点L,L+1,L+2....R-1,R的划分最小代价也就是多边形(L,L+1),(L+1,L+2)...(R-1,R),(R,L)的划分代价嗯...大概就是这样低精代码:/*数组没开够,爆零两行泪ll开成 int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两原创 2020-11-02 21:39:36 · 234 阅读 · 0 评论 -
P5785 [SDOI2012]任务安排
link代码还是有些问题…/*数组没开够,爆零两行泪ll开成 int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪空间开一倍,爆零两行泪无向变有向,爆零两行泪题意没审清,爆零两行泪文件名起错,爆零两行泪调试忘删除,爆零两行泪文件不保存,爆零两行泪文件不读入,爆零两行泪文件不输出,爆零两行泪*/#includ原创 2020-10-31 19:33:21 · 106 阅读 · 0 评论 -
P2608 [ZJOI2010]任务安排
/*数组没开够,爆零两行泪longlong开成int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪线段树开一倍,爆零两行泪无向变有向,爆零两行泪题意没审清,爆零两行泪文件名起错,爆零两行泪调试忘删除,爆零两行泪没用freopen,爆零两行泪*/#include<bits/stdc++.h>#defin原创 2020-10-31 19:31:40 · 320 阅读 · 0 评论 -
AcWing 1087. 修剪草坪
link双倍经验三倍经验/*数组没开够,爆零两行泪longlong开成int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪线段树开一倍,爆零两行泪无向变有向,爆零两行泪题意没审清,爆零两行泪文件名起错,爆零两行泪调试忘删除,爆零两行泪没用freopen,爆零两行泪*/#include<bits/stdc原创 2020-10-31 19:30:18 · 127 阅读 · 0 评论 -
AcWing 1090. 绿色通道
link双倍经验/*数组没开够,爆零两行泪longlong开成int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪线段树开一倍,爆零两行泪无向变有向,爆零两行泪题意没审清,爆零两行泪文件名起错,爆零两行泪调试忘删除,爆零两行泪没用freopen,爆零两行泪*/#include<bits/stdc++.h&原创 2020-10-31 19:28:26 · 124 阅读 · 0 评论 -
AcWing 1089. 烽火传递
link/*数组没开够,爆零两行泪longlong开成int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪线段树开一倍,爆零两行泪无向变有向,爆零两行泪题意没审清,爆零两行泪文件名起错,爆零两行泪调试忘删除,爆零两行泪没用freopen,爆零两行泪*/#include<bits/stdc++.h>u原创 2020-10-31 19:26:33 · 179 阅读 · 0 评论 -
AcWing1088.旅行问题
link代码好像还有一点问题/*数组没开够,爆零两行泪longlong开成int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪线段树开一倍,爆零两行泪无向变有向,爆零两行泪题意没审清,爆零两行泪文件名起错,爆零两行泪调试忘删除,爆零两行泪没用freopen,爆零两行泪*/#include<bits/std原创 2020-10-31 19:24:17 · 123 阅读 · 0 评论 -
AcWing135. 最大子序和
link/*数组没开够,爆零两行泪longlong开成int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪线段树开一倍,爆零两行泪无向变有向,爆零两行泪题意没审清,爆零两行泪文件名起错,爆零两行泪调试忘删除,爆零两行泪没用freopen,爆零两行泪*/#include<bits/stdc++.h>u原创 2020-10-31 19:20:08 · 83 阅读 · 0 评论 -
Acwing1307. 牡牛和牝牛
link/*数组没开够,爆零两行泪longlong开成int,爆零两行泪多组忘清空,爆零两行泪 dp 没初值,爆零两行泪深搜没边界,爆零两行泪广搜忘出队,爆零两行泪输入没加 &,爆零两行泪模数没看见,爆零两行泪 -1 不输出,爆零两行泪越界不特判,爆零两行泪线段树开一倍,爆零两行泪无向变有向,爆零两行泪题意没审清,爆零两行泪文件名起错,爆零两行泪调试忘删除,爆零两行泪没用freopen,爆零两行泪*/#include<bits/stdc++.h>u原创 2020-10-31 19:17:39 · 197 阅读 · 0 评论 -
UVA1316 Supermarket
题目描述link给定n个物品,第i件物品有如下信息:卖出去可以转p[i],物品过d[i]天过期,且过期后卖不出去。卖掉一件物品用1天,求最大收益。思路整理首先,为了维护最大收益,我们可以维护一个小根堆来找出已卖出物品的最小价值。这是一个类似于dp的思想(其实不是),即在第t天时(t是堆中元素的个数),堆中存的是已经卖出的物品的价值。非常不容易想到,对于i这一个物品,若当前是第d[i]天(马上要过期了),我们可以取出堆顶(卖出物品中价值最小的),与之同p[i]比较。如果发现p[i]更大,我们可以原创 2020-10-31 19:09:35 · 105 阅读 · 0 评论 -
poj3974 最长回文子串
题目描述link输入格式多组数据,每次输入一个字符串,以"END"结尾输出格式对于每个字符串,输出它最长回文子串的长度AC代码#include<iostream>#include<algorithm>#include<cstdio>#include<cmath>#include<string>#include<cstring>using namespace std;int P=131,len;char s[原创 2020-10-31 19:02:15 · 98 阅读 · 0 评论