摘要: 题目链接 题解 在指定一些位置上的数不能更改的情况下需要将一个序列变为严格但调递增序列的所需要最少的修改次数 题解 首先判断掉不能修改的情况不能修改的$m$个位置将序列划分为$m+1$个部分,显然这$m+1$个部分是互不影响的(因为边界已经确定了),那么可以考虑对于每一个部分分别考虑对于每一个部分我 阅读全文
posted @ 2020-10-28 21:12 tryatry 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题意 给定一棵有n个节点的无根树和m个操作,操作有2类: 将节点a到节点b路径上所有点都染成颜色c; 询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 题解 先考虑将操作放 阅读全文
posted @ 2020-10-13 17:37 tryatry 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题解 首先考虑直接$dp$的写法$dp_{i,j,k}$表示在前$i$个数选择了$j$个数后末尾连续未选择的数个数为$k$可取得的最大值,转移也很简单。但这个做法是$O(n^3)$的,观察一下可以发现$k$这一维可以用单调队列优化掉,然后复杂度就为$O(n^2)$ 查看代码 #includ 阅读全文
posted @ 2020-09-10 20:32 tryatry 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题解 用矩阵表示状态,用线段树维护子串转移 查看代码 #include <bits/stdc++.h> using namespace std; #define _for(i,a,b) for(int i = (a);i <= (b);++i) typedef long long ll; 阅读全文
posted @ 2020-09-10 19:30 tryatry 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题意 给一张$n$个点$m$条边的无向连通图,有$q$次询问,每次给出一些边,让你判断这些边能否同时出现在一颗最小生成树上 题解 首先要知道的一个性质就是一个无向连通图的最小生成树权值不同边的选择是相互独立的所以我们可以把询问离线按边权从小到大排序,再按$Kruskal$的做法加边求最小生 阅读全文
posted @ 2020-06-04 15:39 tryatry 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题意 给定一张有向图,每条边有权值,求用1个或多个不相交的环覆盖所有点并且环的权值和最小 题解 与有向图最小路径覆盖类似,考虑将有向图拆点成二分图,由于最后所有点都被环覆盖,所以最后的环覆盖一定对应拆点二分图上的一组完备匹配。于是问题就转化成了求二分图带权最优匹配问题,由于满足最优匹配一定 阅读全文
posted @ 2020-06-03 21:30 tryatry 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题意 给定一个长度为$n$的字符串,对于$1 题解 对于求长度为$x$的回文子串个数的问题可以用回文自动机在线性时间复杂度内解决。但此题要求回文子串的前一半也是回文串,显然前一半是回文串等价于后一半也是回文串,那么我们可以在构建回文自动机的同时维护一个$half$数组,表示不超过当前回文串 阅读全文
posted @ 2020-06-03 15:17 tryatry 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 链接 题解 首先对有向无环图进行拆点,即将每个点拆为入点$i$和出点$i+n$,得到一张二分图结论:有向无环图的最小路径覆盖等于$n$-拆点二分图最大匹配数简单证明:因为此题要求路径不相交,所以每一个点的入度和出度都不超过1,而每个节点都会被覆盖即每个节点的入度和出度至少有一个为1.所以最小路径覆盖 阅读全文
posted @ 2020-06-03 00:18 tryatry 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题解 由于$p$很小,所以可以考虑将当前有哪些钥匙用二进制压缩,作为一层状态,这样最多有$n*m*2^p$个状态 这样处理过后在图上$bfs$求解即可,注意一个房间可以能有多个钥匙 查看代码 #include <bits/stdc++.h> using namespace std; typ 阅读全文
posted @ 2020-06-03 00:02 tryatry 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 链接 题解 首先对序列做一个简单$dp$求出以每个位置为末尾的最长上升子序列长度$dp_i$,求出最长上升子序列长度$k$,然后考虑如何建图对于每个$dp_i=1$的位置从源点连一条流量为1的边对于每个$dp_i=k$的位置向汇点连一条流量为1的边对于每个位置$i$,向满足$j>i,dp_j=dp_ 阅读全文
posted @ 2020-06-02 23:52 tryatry 阅读(150) 评论(0) 推荐(0) 编辑