随笔分类 - 题解
摘要:题目传送门 第一次接触分块...... 分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。 分块修改理论复杂度为O(N/M),M为块的大小,有基本不等式得M=Sqrt(N)时较优。 分块将原数组分为M块,对M块的信
阅读全文
摘要:题目传送门 题目大意:给你若干根木棍,每根木棍有前后两种颜色,连接两根木棍需要前后颜色相同,求能否将所有木棍连接在一起。 Solution: 不要将木棍看成点,将颜色看成点。 其实就是求是否存在欧拉路径。 有欧拉路径要满足两个条件: 图是连通图。 没有或只有两个入度为奇数的点。 判断连通性用并查集。
阅读全文
摘要:题目传送门 一道暴力可以过的水题。(直接暴力模拟的那种) 但是我打Trie练练模板,但是TMD因为数组开太小卡了好久。 code:
阅读全文
摘要:题目传送门 一道斜率优化的题目。 但暴力方程很关键。 我们先将x作为关键字Sort一遍,再将y处理成单调递减,即把无用的土地去除。 然后单调队列维护凸包做斜率优化就好了。 code:
阅读全文
摘要:题目传送门 暴力直接对于每个点跑一遍二分图匹配,能拿四十分。 然而我们考虑正解。 对于一对Couple我们建♂->♀的一条边,对于一对曾经有恋情的情侣我们建♀->♂的一条边。 跑Tarjan缩点。 判断每一对Couple,如果在同一个强连通分量里,他们就不稳定(即能通过曾经有恋情的关系跑回来)。 c
阅读全文
摘要:题目传送门 一道斜率优化的题目,加深了印象。 设sum[i]=∑p[i],S[i]=∑p[i]*x[i]。 暴力方程加前缀和优化: 然后变形: 求最小截距,因为k单调,所以是个下凸包,单调队列维护。 //红体字在y相减时会抵消,所以无影响。 code:
阅读全文
摘要:题目传送门 这道题可以很快想到暴力DP的做法: 但是数据范围有50000,这就需要用斜率优化了。 我们设S[i]=C[i]+i(C[i]为前缀和),L++,设j为i的最优决策点。。 原方程就变为: 我们设2*S[i]为k。 相当于这题就变成了求最小的截距f[i]。 假设A,B,C,D为四个决策点。
阅读全文
摘要:题目传送门 借这道题练一下Treap和Splay的板子。 code: #include <cstdio> #include <cstdlib> using namespace std; int read() { char c;while(c=getchar(),(c<'0'||c>'9')&&c!=
阅读全文
摘要:模板传送门 KMP的模板,但是要输出Nxt,搞得朱洪dalao的优化打不了。(题外话) KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息
阅读全文
摘要:例题传送门 听YZ哥哥说Splay是一种很神奇的数据结构,所以学习了一下它的最基本操作。O(1)的Spaly。 伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(logn)内完成插入、查找和删除操作。它由丹尼尔·斯立特Daniel Sleator和罗伯特·恩卓·塔扬Robert
阅读全文
摘要:题目传送门 看题目可知这是一道差分约束的题目。 根据每种关系建边如下: 对于每种情况建边,然后跑一边SPFA。(最长路) 因为可能会有自环或环的情况,都不可能存在。 跑SPFA时记录入队次数,超过N弹出。 SPFA的dist起始值为1,ans=∑dist[i] 对于每个点做一遍SPFA会超时,所以将
阅读全文
摘要:题目传送门 平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1
阅读全文
摘要:题目传送门 这道题用Tarjan求出点-双连通分量,对联通块做一些玄学操作。 细节很多,不说了看code。 code:
阅读全文
摘要:题目传送门 二维树状数组,对于每个颜色开一个树状数组,用容斥求解。 code:
阅读全文
摘要:主席树刚接触觉得超强,根本看不懂,看了几位dalao的代码后终于理解了主席树。 先看一道例题:传送门 题目大意: 假设我们预处理出了每个数满足条件的最右边界。 先考虑暴力做法,直接对x~y区间暴枚,求出答案。 主席树做法:设主席树的下标表示边界为i的信息。 网上找不到百度百科对主席树的定义,那我说说
阅读全文
摘要:题目传送门 题目大意:有F组数据,N表示有N点,M表示有M条边,走一遍边需要花费Ti个时间,还有W个虫洞,可以向前回溯Ti时间,求能否从1点出发,经过一些路或虫洞回到1点后时间为负。 建图后用SPFA判负环即可。 code:
阅读全文
摘要:题目传送门 这道题苟了我好久,因为链表的内存问题,之后再细讲。 首先这是一道Tarjan+DAG上DP的题目。 有三种门,对于每种门可以和其他门相连。即连边。 使用链表快速查询连边。 建完图后可以进行Tarjan缩点。 然后做一遍DAG上DP就好了。(记搜) 然后因为建图时会有很多条边,而行列最多只
阅读全文
摘要:题目传送门 经过长时间的旅行,很长时间没写过博客了,这次把上次WA的题目过了。 由于每次蜥蜴从石柱上跳下时,石柱的高度会-1,可以看做占了一格的流量。 建图: 1.建超级源和超级汇,设超级源连到每只蜥蜴的边容量为1,每个可以跳到外面的点连到超级汇的边的容量为maxlongint。 2.对于每个点建一
阅读全文
摘要:题目传送门 二分图匹配的题目。 但建边有一定难度,关系比较复杂。 首先要统计总共需要几张床。 在校且住校的会需要一张床,不住校的需要一张床。 然后对于在校且住校的与自己的床连边,不住校的与认识的住校的人连一条边。 跑一遍匈牙利就好了。 code:
阅读全文
摘要:题目传送门 刚开始是看到这道题目还以为是序列连续的。 当然了,序列可以不连续。 设f[i]表示到第i位时的序列的最长长度。 取cnt=Max f[j]+1,然后转移回去使f[j]=cnt。 这是为了让下次转移时能最优。 可以对读入数组进行滚动。 code:
阅读全文