自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (1)
  • 收藏
  • 关注

原创 True Liars

题意:神圣部落的成员都是诚实的,也就是说,他们总是说实话。而恶魔部落的成员都是骗子,也就是说,他们总是说谎。Akira 问这些人中的某些人是否神圣。这些人非常了解彼此并且总是根据他们的特质“忠实地”回应他(他们总是说实话或总是撒谎)。他不敢问任何其他别的的问题,因为传说中一个恶魔会在他不喜欢这个问题时永远诅咒提问的人。他还有另一条重要的线索:传说提到了两个部落的人口。因为生活在这个岛上的每个人都...

2019-06-30 18:05:58 254

翻译 带权并查集的基本操作

参考博客带权并查集就是一系列能够维护结点到根节点权值的特殊并查集。常用于区间可合并的求和和判断。甚至差值也可以判断。十分巧妙。在查询操作上,维护权值,路径压缩到根节点的过程,将中间的路径长度也加到该点上。int find(int x){ if (x != f[x]) { int t = f[x]; f[x] = find(f[x]); sum[x] += sum[t];...

2019-06-30 11:49:46 293 2

原创 拓扑排序+并查集

图论专题M题题意主要是:给出两个值大小关系,每个值至少为1,求出值的总和最少为多少,如果有矛盾输出-1这道题之所以记下来,主要是处理图的方式是比较经典的,我觉得值得参考。我一开始想到spfa,又因为这是多源的,所以采用了拓扑排序求最长路。用并查集维护相等关系,最后对每个值取同一集合中最大值。如果存在环,说明出现矛盾。但是相等关系出现矛盾怎么维护呢?这个就是关键点了,对于1->3-...

2019-06-30 03:36:01 184

原创 最小字典序欧拉路径

欧拉路就是所有边都走一次,也只走一次。欧拉回路就是能够回到起点,欧拉路径没有这么多要求。算法本质是这样的:从起点开始,尽可能地不去走桥(走完之后会把图分成两半),而去走其他边,这样的输出是欧拉路径。但是判桥的过程较为麻烦,我们可以采取这样的手段。如果起点开始有两条边,一条边是应该走的边,另一条是桥。如果我们采用dfsdfsdfs的方式先遍历到底,直到无路可走的时候才加入答案栈中,我们容易...

2019-06-30 03:35:55 652

原创 贪心+double二分+最小生成树

图论O题题意:空间里有n个点,连接出一条最小生成树保证高度之和/水平长度之和尽可能小。题解:考虑把生成树的总权值等价于:每条边的权值(暂时不会计算)wiw_iwi​,每条边选择或者不选择为xix_ixi​W=∑i=1n(n−1)xi∗wiW=\sum^{n(n-1)}_{i=1}{x_i*w_i}W=∑i=1n(n−1)​xi​∗wi​如果最后的答案是ansansans,显然满足W=∑x...

2019-06-30 03:35:49 166

原创 最短路的简单进阶(建图的优化)

这一篇描述了关于最短路的简单变式对于最后一道题,真正复杂度通过的做法是拆点。类似于网络流的拆点,不过这里的拆点,是为了使得处理边权信息得到可能。正常对点无法记录边权信息,我们可以考虑拆点将这样的信息暴露出来。对于每个点发出的颜色,相当于可以独立出一个点。到达这个点只会可以通过这个点直接到达另一个点(不需要花费)。有三个点u,v,ku,v,ku,v,k,对于这三个点有两条边且颜色都是cc...

2019-06-30 03:35:43 211

原创 图论A题、B题

就是两道很巧妙的题,记录在这里。A题反转边,使得任意一点总能走到底(随机走)。但是坏的情况是,无限走环。所以我们需要反转边使得无环,同时价值等于最大边,要求价值尽可能的小。有价值是最大边的限制,我们很容易想到二分。对于环的剔除,只要修改环的一条边即可,但是这样可能造成新的环。我们反过来思考,对于一个无环图,怎么加边使得依旧无环呢。无环图的拓扑排序是合法的,不存在从拓扑排序后面的指向...

2019-06-30 03:35:36 180

原创 简谈分层图

分层图是一个处理对边存在额外操作的较好的处理方式。这里引入一道例题,在正常的最短路中,你可以挑选k条路不需要花费时间,那么最小总花费是多少?存在一种dpdpdp的处理方式,dp[i][j]dp[i][j]dp[i][j]表示到第i个节点用了j次免费,dp[n][0 k]dp[n][0~k]dp[n][0 k]即为答案。那么怎么去转移呢,dp[v][j]=min(dp[u]...

2019-06-30 03:35:31 306

原创 Trie树_初章

Trie树LRJLRJLRJ白书字典树学习总结我们常常用TrieTrieTrie[也叫前缀树]来保存字符串集合。从根节点到每个单词结点的路径上所有字母连接而成的字符串就是该结点对应的字符串。根节点标号为0,其余结点编号为从1开始的正整数。具体来说,用ch[i][j]ch[i][j]ch[i][j]表示结点iii的编号为jjj的子结点。这里我们把编号从0−250-250−25分别对应26...

2019-06-30 03:35:24 123

原创 Kmp算法初析

考虑字符串匹配问题。假设文本是一个长度为nnn的字符串TTT,模板是一个长度为mmm的字符串PPP,且m≤nm≤nm≤n。寻找匹配点使得T[i]=P[0]....T[i+m−1−1]=P[m−1]T[i]=P[0]....T[i+m-1-1]=P[m-1]T[i]=P[0]....T[i+m−1−1]=P[m−1]朴素方法:枚举起点,暴力比较,并且一旦不相同就退出。复杂度:o(mn)o(m...

2019-06-30 03:35:18 452

原创 Manacher:求最大回文子串

求最大回文子串ManacherManacherManacher算法。在求解回文子串时,分奇偶处理比较麻烦,manachermanachermanacher算法在每个字符两边加上一个"#""\#""#"通配符。可以把偶数回文子串和奇数回文子串都扩充成奇数回文子串# * # * #偶数情况,此时中心为## * # * #...

2019-06-30 03:35:11 129

原创 扩展kmp

利用到了kmpkmpkmp和manachermanachermanacher的部分思想。个人理解只能称的上是部分。扩展kmp处理的是:对于一个串T,串S每个后缀和串T的最长公共前缀。对于一个串S[1…10],T[1…100]。如果已经匹配到了S[1…10]=T[1…10].且S[1…5]=S[2…6]。[以上为条件]容易得到:S[2…6]=S[1…5]=T[1…10]。这正是利用到了...

2019-06-30 03:35:04 322

原创 回文树

回文树是一个很方便的解决回文串的问题。他可以求出本质不同的回文串个数。它的处理方式是这样:每次一个一个加入,每次加入字符的时候计算个数。它对每个回文串都存储了一个结点,属性为长度。通过每个回文串,以一条字母边可以指向新的回文串,新的回文串=旧的回文串在两侧加上该字母。每次找到当前字母结尾的最长的且能够满足新加入的字母和最边缘的字母(该回文串签一个字母)相同的最长回文串。寻找的过程是跳fa...

2019-06-30 03:34:56 247

原创 AC自动机初探

AC自动机AC自动机是kmpkmpkmp和TrieTrieTrie的结合,它处理了单串匹配多模式串的问题。之所以这么因为它引入了failfailfail指针处理相同后缀的信息,利用TrieTrieTrie处理多模式串的问题。从Trie的0结点开始往外延伸,对于每个结点都有自己的指针指向自己的后缀。后缀一定是小于自己的长度的,所以后缀的后缀事先应该是处理好的。先把所有模式串插入,再求fai...

2019-06-30 03:34:47 136

原创 Codeforces Round #570 (Div. 3)

这次div3的题挺有水平的。至少我这么觉得。(后面三题都没做出来哭了。F. Topforces Strikes Back题意:从序列中找出最多三个互不整除的数,使之和最大。题解:假设我们枚举到第iii个数为最大数,我们选取不能整除的最大数,再对第二个数选取不能被整除的最大数。排序即可实现。正确性呢?对于选择的a、b、ca、b、ca、b、c,如果对于ccc,我们选择b‘<...

2019-06-29 13:04:02 443 1

原创 atcoder abc F - Must Be Rectangular!

题意:有一个操作,对于一个矩阵的三个点,可以加上最后一个没有的点。问对于已经有的点能够实现多少次这样的操作?题解:我们考虑图:实际上一个可以操作的地方只要是连通的区域,就可以把这块区域的点填满。蓝色为已有的点,红色是后来加上的点,可以通过一点点加进来。只要在这个区域内的,线上的点都可以被填上。求出每个块内,所有点在的横线和竖线个数,相乘就是所有点。怎么求有多少个区域呢?我们可以...

2019-06-26 19:39:35 374

原创 三分求极值 - Minimum Bounding Box

三分是指之前接触过的一个算法,但是没有用来写过题。最近atabc130at abc130atabc130的FFF题出到了,结果压根没想到要用三分。题意:对于nnn个点,要求使得这nnn个点xxx轴上的最大值-最小值和yyy轴上的最大值-最小值乘积最小。通过样例可以发现时间显然可以是小数。那么就是函数求极值的问题了。事实上,我并不会证明此题为什么是单峰函数。但是用三分可以忽略这些,直接解决。(...

2019-06-26 19:20:10 716 1

原创 Gym101911 题解

酿酿跄跄终于补完了题,这次其实不是很难。但是一部分是时间因素,一部分是被卡了一些特例。总之自己还是太菜了呀QAQQAQQAQ比赛链接AAA题意:每天有mmm小时,你喝咖啡需要花一小时,你想在nnn个时刻都喝过一次咖啡,老板规定连续喝咖啡的间隔必须是ddd以上,求最少多少天,并输出每个时刻第几天喝。题解:对于每个时刻,贪心的选刚好大于ddd的最开始的一个,每次都这样选择。但是还需要支持...

2019-06-25 15:41:28 515

原创 状态结点查重的问题

lrjlrjlrj老师给我们三种解决办法,对于一个节点的查重。这里拿八数码问题中的状态查重来介绍:数组表示了当前状态。编码和解码将排列变成整数:设计一套排列的编码和解码,把0−80-80−8的全排列和0−3628790-3628790−362879的整数一一对应。然而具体实现的对应并没有看懂。int vis[362880],fact[9];void init_lookup_tabl...

2019-06-12 15:17:15 255

原创 双向bfs

事实上HDU−2612HDU - 2612HDU−2612也是双向bfsbfsbfs,但由于题目要求的原因,所以没有将其优势发挥出来。双向bfsbfsbfs实质上是引入起点和终点,一起遍历,并且给数组多加一维,结束的标准时到达的这个点的另一维也已经到达了。并且双向bfsbfsbfs是双向的最短路,所以此时一定是最短路。考虑广度优先遍历,越到后面的层数,常数越大,如果采用双向bfsbfsbfs可...

2019-06-12 14:39:32 455

原创 UESTC 2018 Summer Training #13 Div.2 初步题解

只做出来4题hhhhhhhhh太菜了还是。一共10题,目前完成了888道题,还有AAA、GGG未完成。比赛地址BBB:要求:求有多少严格上升子序列。题解:容易想到以第iii个元素为结尾的子序列个数等于所有之前的比它小的序列数加上它自己。dp[i]=∑a[j<i]<a[i]dp[j]dp[i]=\sum_{a[j<i]<a[i]...

2019-06-10 03:08:11 173

原创 [Gym 101755]UESTC 2018 Summer Training #12 Div.2初步题解

这是基于在目前能力内完成的题解。这场比赛我做出了666题,实际上可以做出888题。还有111题是真的缺少了这类思想。地址:实质上是一场gymgymgym截止到现在:还剩下D、G、I、F\color{red}D、G、I、FD、G、I、F题未补AAA: 已知a、ba、ba、b的sumsumsum和gcdgcdgcd,求出一组可能解a+b=xk+yk=suma+b=xk+yk=suma+b=...

2019-06-08 12:10:20 244 4

原创 Uva1515 Pool construction 最小割

Uva1515Uva1515Uva1515题意:对于一个字符矩阵,有#\##和...两种字符,分别代表草和洞。相邻草和洞需要建立栅栏,草和洞可以互相转化通过一定的花费。求最小花费。题解:我们考虑分割,想到"割"这个概念。类似于之前最大闭合子权图的概念,割的应用一般出现:可选可不选的费用上,选择了割就是不选择这个费用。对于这道题,同理,我们需要满足的是:草源点无法通达到洞汇点。(也就是建...

2019-06-07 00:07:55 166

原创 割点/桥

对于无向图GGG,如果删除某个点uuu之后,连通分量增加,称uuu为图的关节点或者割顶(割点)。对于连通图,割顶就是删除之后使得图不再连通的点。求割顶的方法:这里我们用到一个定理:在无向连通图GGG的dfsdfsdfs树中,非根结点uuu是GGG的割顶当且仅当uuu存在一个子结点vvv,使得vvv及其所有后代都没有反向边连接到uuu的祖先。(连接到uuu可以)定理是显然的(根节点的话必...

2019-06-06 19:16:02 217

原创 隐式图搜索

隐式图搜索对于某些状压题,转移很少,但是状态很多。我们是无法直接判断能否转移的,因为实质上很多转移是没有必要的。所以我们在用到这个状态的时候,枚举转移即可。这是第一次遇到。如果以后更深的理解和好题自然会加上来。Uva658Uva 658Uva658题意:有nnn个bugbugbug,有mmm个补丁。每个补丁能够改变当前bugbugbug的总状态,不过也有前提条件(需要的状态)。我们...

2019-06-06 15:02:54 525

原创 Educational Codeforces Round 66 (Rated for Div. 2)题解

能力有限,只有BBB至EEE的题解。而且我只做出了两题,最后156315631563的rating滚粗了。(居然加了一分)比赛链接B题题意:要求模拟一个forforfor、addaddadd、endendend组成的程序。forforfor后面接循环次数。具体看样例。同时如果add后超过了232−12^{32}-1232−1,需要输出溢出。题解:模拟栈。遇到forforfor入...

2019-06-06 14:56:58 459

原创 存在免费套餐的最小生成树 Uva1151

题意:求最小生成树。(n2n^2n2条边:需要自己算一共有nnn个点的坐标)不过你可以选择一个套餐,花费ccc使得套餐内点全部连通。套餐数量q≤8,n≤1000q≤8,n≤1000q≤8,n≤1000题解:套餐数量较少,我们可以枚举(二进制即可)。枚举之后把所有包含的边权赋值为000求最小生成树并且能够使得(边权赋值为000的),primprimprim不太好实现。思路一:枚举∗...

2019-06-05 17:24:14 122

原创 表达式树的简析

二叉树是表达式处理的常用工具。找到"最后计算"的运算符(它是整棵表达式树的根),然后递归处理。递归处理成树是表达式处理的一个重要方式。这里我只记录和理解了lrjlrjlrj老师的代码(抄了一遍,自己还没动手自己写过。不过目前这不是重点内容,所以到此为止。个位数加减乘除成表达式树const int maxn = 1000;int lch[maxn],rch[maxn];char op[max...

2019-06-05 13:15:30 470

原创 A*相关

网上很多的解析很详细(但我现在只是需要一个简单的板子,因为主要重心不在这里而是图论其他的简单部分的熟练应用。等到以后我会扩充。A∗A*A∗的核心在于估价函数,预估以后最应该走的路。所以我们实现求出每个点到终点的距离,每次bfsbfsbfs扩充,扩充的过程中不断增加路径长度,同时以f[node]=cost+d[node.to]f[node]=cost+d[node.to]f[node]=cost...

2019-06-04 17:15:46 124

原创 紫书:二分图匹配 最大流解决

网络流的一个经典应用是二分图匹配。匹配是指:两两没有公共点的边集。二分图是指:可以把结点集分成两部分X和Y,使得每条边恰好一个端点在XXX,另一个端点在YYY。换句话说,同色节点不相邻,进行二染色。一般在画图的时候,把XXX结点和YYY结点画成左右两列。可以证明一个图是二分图,当且仅当没有奇数圈。当我们使用dinicdinicdinic跑二分图的时候,复杂度只有O(n12m)O(n^\f...

2019-06-01 22:54:06 563

数学模板.zip

本人整理的acm算法,包括数学的常用操作,x!质因数分解,判断大质数和大合数分解,扩展中国剩余定理,扩展欧几里得(判断和计算ax+by=s),非质数n次剩余,扩展BSGS,一定范围内的最近最远素数对,矩阵快速幂,FWT or,and,xor运算,FFT(快速傅里叶变换),斐波那契数列循环节,约瑟夫环等算法

2019-10-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除