
模板&裸题
sancpp
这个作者很懒,什么都没留下…
展开
-
HDU4745 Two Rabbits(区间dp)
wsfw 卡在最后的答案统计了,看了别人的博客,觉得很有道理。先破环成链,答案有两种情况:1.在一段区间(最长为n)中的回文子序列:12321。两人站在l,r的位置开始行动2.对于一个长度为n-1的序列来说,str[l-1]==str[r+1],所以有一种情况是两人站在l-1,r+1的位置开始行动。(说白了,l-1,r+1是同一个点,这种情况就是起点相同的情况。)#include <bits/stdc++.h>using namespace std;//-----pre_def--原创 2021-08-23 20:43:01 · 140 阅读 · 0 评论 -
P2414 [NOI2011] 阿狸的打字机(AC自动机 fail树 dfs序 树状数组)
传送门一道比较模板的题,但是比较灵活。1.先对字符串建立trie树,同时维护每个节点父亲信息fa[now]。P表示改模式串结束B表示回退到父亲节点2.对trie树建立fail指针&fail树。3.对fail树处理出dfs序,以便用树状数组维护子树和。4.读入询问,按y关键字排序。(离线处理)5.在trie上遍历字符串,每到一个单词的结尾(‘P’)统一处理出所有询问。(第x个单词在这个单词中出现了几次)‘B’:撤销上一步操作‘*’:树状数组改位置+1,继续向下处理。我的写法相关原创 2021-07-28 20:19:07 · 145 阅读 · 0 评论 -
splay板子整理
本质就是个平衡树。具体到一道题,无非就是要考虑如何1.每个节点维护什么信息。2.如何维护splay(top,bottom等splay特色操作)3.如何建树,建树规则如何实现。如何找到需要的节点。4.结合其他数据结构(难)#include <bits/stdc++.h>using namespace std;//-----pre_def----const double PI = acos(-1.0);const int INF = 0x3f3f3f3f;typedef lo原创 2021-07-08 20:46:40 · 245 阅读 · 0 评论 -
点分治模板、例题整理
传送门1.题意求一个树中距离小于等于k的点对的个数。1≤N≤1041≤N≤10^41≤N≤1042.分析点分治算法:树的重心树的重心是指:删除该点后,最大子树(的点数)最小的点。关于重心的结论:删除重心之后,最大子树的点数小于等于总点数/2。于是:我们可以将一个树上问题删去重心点之后分解成若干个子树内部的问题和子树之间的问题。这样可以保证是log级的时间复杂度。(边分治则不行,会被菊花图卡成n)关于本题我们先将重心找出来,然后路径小于等于k的点对可以分成如下:1.两点在同一颗子树中。原创 2021-05-02 20:58:19 · 666 阅读 · 2 评论 -
左偏树总结
洛谷模板题左偏树的特点——可并堆本质上是一个二叉(最小)堆。const int N = 2e5 + 10;struct node{ int v, dist, lson, rson;} tr[N];通过维护dist(距离最近的“叶子节点”(并不严谨)的距离)来实现log级的合并题目需要的操作也大多数是合并两个集合+取集合最值进行操作核心函数merge:int merge(int x, int y)//将下x,y两颗子树合并,返回root{ if (!x || !y)原创 2021-03-27 17:40:53 · 154 阅读 · 0 评论 -
P1486 [NOI2004] 郁闷的出纳员(splay模板整理)
传送门花了好长时间#include <bits/stdc++.h>using namespace std;//-----pre_def----const double PI = acos(-1.0);const int INF = 1e9;typedef long long LL;typedef unsigned long long ULL;typedef pair<int, int> PII;typedef pair<double, double>原创 2021-03-21 22:13:23 · 188 阅读 · 2 评论 -
splay模板复习
splay模板记得加哨兵!!!#include <bits/stdc++.h>using namespace std;//-----pre_def----const double PI = acos(-1.0);const int INF = 0x3f3f3f3f;typedef long long LL;typedef unsigned long long ULL;typedef pair<int, int> PII;typedef pair<doubl原创 2021-03-18 21:16:59 · 150 阅读 · 0 评论 -
NC201891 采蘑菇的克拉莉丝(树链剖分)
传送门分析先处理出重链,再用线段树维护区间和(单点更新)查询核心代码LL ans = 0;for (int i = h[root]; ~i; i = ne[i])//便利当前root所连的所有边{ int t = e[i];//与root直接相连的点 if (t == fa[root])//如果是父节点 { ans += (query_tree(1) - query_tree(root)) * w[i]; } else//如果是儿子节点 {原创 2021-03-06 19:46:41 · 1092 阅读 · 1 评论 -
P3379 【模板】最近公共祖先(LCA,树链剖分)
传送门核心函数int lca(int u, int v){ while (top[u] != top[v])//如果u,v在不同的重链,向上跳 { if (dep[top[u]] < dep[top[v]]) swap(u, v); u = fa[top[u]]; } //u,v在同一条链上了(重链没有分叉&&此时的u,v不是最开始的u,v了) if (dep[u] < dep[原创 2021-03-04 12:31:22 · 188 阅读 · 1 评论 -
2021牛客寒假算法基础集训营6 G.机器人 (状压dp+__int128)
传送门题意有 n 个机器人,每个机器人会读入一个 x ,并返回 ax+b 。现在银临姐姐手里有一个数 x ,她想将机器人按某种顺序排列,使得最终返回得到的 x 尽可能大。对于所有的数据,1≤n,x,ai,bi≤20\le n,x,a_i,b_i\le20≤n,x,ai,bi≤20 。分析区间dp裸题,但是动手算算上界会超longlong。调了好久的高精都有问题(板子是很久之前写的,现在看起来当时写的并不好),最后__int128水过去了。关于__int128仔细整理一下__int128原创 2021-02-25 00:34:30 · 1538 阅读 · 4 评论 -
P1005 [NOIP2007 提高组] 矩阵取数游戏(区间dp+__int128)
传送门思路不解释了:大佬的题解看到这题__int128也能过,想拿__int128试试。遇到的小坑:f[i][j] = max(f[i - 1][j] + (1 << (m - j + i - 1)) * d[i - 1], f[i][j]);f[i][j] = max(f[i][j + 1] + (1 << (m - j + i - 1)) * d[j + 1], f[i][j]);上面的写法是错的(不知道怎么解释 )f[i][j] = max(f[i - 1][j原创 2021-02-25 00:33:20 · 398 阅读 · 0 评论 -
洛谷P1505 [国家集训队]旅游 (树链剖分+难写的线段树+边权转点权)
传送门题目描述给定一棵 nn 个节点的树,边带权,编号 0 \sim n-10∼n−1,需要支持五种操作:C i w 将输入的第 ii 条边权值改为 wwN u v 将 u,vu,v 节点之间的边权都变为相反数SUM u v 询问 u,vu,v 节点之间边权和MAX u v 询问 u,vu,v 节点之间边权最大值MIN u v 询问 u,vu,v 节点之间边权最小值保证任意时刻所有边的权值都在 [-1000,1000][−1000,1000] 内。分析树剖裸题。需要特殊处理的好像C操作原创 2021-02-24 01:14:38 · 179 阅读 · 2 评论 -
P3224 [HNOI2012]永无乡 splay例题总结
传送门1.知识点splay+并查集+启发式合并2.思路维护n颗splay,再通过并查集+启发式合并(暴力 )维护。const int N = 1800010;//n+lognstruct node{ int s[2], p, v, id, size; //儿子,父亲,重要度(排序关键字),初始编号,维护大小用于get_k void init(int _v, int _id, int _p) { v = _v; id = _id;原创 2021-02-16 15:05:15 · 163 阅读 · 4 评论 -
[Acwing.291] 蒙德里安的梦想(状态压缩DP复习+总结)
个人总结!!(棋盘式状态压缩DP)0.状态压缩dp的缺点&标志毫无疑问,指数级时间复杂度——导致棋盘的大小一般为二位数,才能用状态压缩dp求解。1.求解此类问题棋盘式状态压缩DP本质上是在一个棋盘内填奇奇怪怪的不同形状的块,(然后求方案数?)2.思维难度要能看出这是动态规划的题目,并建立状态表示,思考出状态转移。一般来说求解该问题可以用以下几点0.一列一列转移,1.遍历一遍所有状态,找出所有合法状态(具体题目具体分析)。2.二维遍历所有状态,建立状态与状态之间的转移关系(具体题目原创 2020-08-10 21:03:02 · 462 阅读 · 0 评论 -
Acwing_920. 最优乘车(最短路问题经典建图+细节处理)
920. 最优乘车问题链接分析具体代码问题链接link.分析虽然是道20年前的noip老题,难度不大。但是有许多细节点还是值得一说。要点:1.sstream库。2.边权为1的最短路问题可以直接bfs求解。3.经典建图方式。建图方式:对于上游车站,向所有下游车站连一条边。答案就是从1号点到n号点的最短路-1。处理输入:sstream库函数(随便看了看,还没怎么搞懂)。。具体代码#include <bits/stdc++.h>using namespace std;原创 2020-08-03 11:06:44 · 827 阅读 · 0 评论 -
[模板_差分约束]AcWing 1169. 糖果
AcWing 1169. 糖果问题描述具体分析具体代码总结问题描述acwing.LUOGU.具体分析个人理解:1.差分约束问题就是一种把这类问题抽象出图,然后利用最短路算法去求解。是最短路的一个经典应用。2.但是在具体的代码实现中,会遇到许多问题。例如:一般spfa求负环会TLE;虚拟源点(超级远点)的建立……3.具体实现思想:利用最短路问题中的不等性质,将问题中的不等关系转化成图中的带权边,再根据——“求最小值跑最长路,求最大值跑最短路”的结论,用spfa求解dist数组。具体代码原创 2020-07-30 19:42:41 · 183 阅读 · 0 评论