![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法(Lazy)
UniverseofHK
事情留在今天,时间送给明天
展开
-
The Coronation(2019 ICPC Southern and Volga Russian Regional E题+ 2-Sat)
The Coronation题意:给定nnn个长度为mmm的010101串,定义两个串相似:两个串对应位置相同的位置数量不小于某给定值kkk;可以通过反转字符串使得两个010101串从不相似变成相似,求最少的反转次数使得所有的010101串两两相似。思路:刚看到这题时还想过网络流、双向bfs?QAQ,后面突然想到好像可以2-Sat,于是就A了。。。那怎样想到2-Sat呢?考虑到每个01...原创 2019-11-04 11:35:22 · 311 阅读 · 0 评论 -
The Kouga Ninja Scrolls(2018沈阳现场E+切比雪夫距离+线段树维护最大次大最小次小)
The Kouga Ninja Scrolls这题可真暴力呀!曼哈顿距离转成切比雪夫距离后大力线段树搞即可!第一次把线段树写成结构体形式,为了x,yx,yx,y两个坐标不用写两棵线段树,也是第一次把pushpushpush_upupup写成结构体mergemergemerge形式,为了方便query时的区间合并。而且写好后(赛后)1A,刺激!!!题意:给定二维平面上nnn个点(编号111~n...原创 2019-10-14 21:15:41 · 382 阅读 · 0 评论 -
工艺(最小、大表示法)
工艺题意:给定长度为nnn的序列,求字典序最小的长度为nnn且与原序列循环同构的序列思路:利用最小表示法(也有后缀自动机以及后缀数组的解法)暴力的比较所有的nnn个循环同构的串纯暴力会被卡到O(n2)O(n^2)O(n2),因此需要加点优化,代码如下#include "bits/stdc++.h"#define hhh printf("hhh\n")#define see(x) ...原创 2019-08-28 17:00:10 · 110 阅读 · 0 评论 -
HDU-2121(有向图最小生成树,朱刘算法)
Ice_cream’s world II题意:给定一个有向图,求最小生成树是否存在,若存在求出最小权值。思路:利用朱刘算法,推荐博客求最短弧集合E0检查E0收缩G中的有向环展开收缩点//#pragma comment(linker, "/STACK:102400000,102400000")#include "bits/stdc++.h"#define pb push_bac...原创 2019-08-16 18:37:01 · 405 阅读 · 0 评论 -
2019牛客多校-8J-Just Jump(组合数+容斥原理)
Just Jump题意:求从000跳到LLL处的方案数,条件限制为:—每次跳跃最少跳ddd的长度—有mmm个pair(t,p)pair(t,p)pair(t,p),每个表示不能在跳第ttt次时跳到点ppp处思路:利用容斥原理,先求出从000跳到LLL处的总方案,然后减去满足某个pairpairpair的所有方案,再加上满足某两个pairpairpair的所有方案,再减去..........原创 2019-08-11 17:58:45 · 168 阅读 · 0 评论 -
K短路-魔法猪学院(A*算法)+骑士精神(IDA*算法)
K短路-魔法猪学院题意:给定一个能量值EEE,以及一些单向边权。求所拥有的能量能从111走到NNN多少次,并且每一次的走法不完全一样,即求最大的KKK使得 前KKK短路的和 不大于EEE。思路:建边时将正反边都记录好第一遍跑dijstradijstradijstra或spfaspfaspfa将从111到所有点最短路求出来,作为A∗A^*A∗算法的g(x)g_{(x)}g(x)函数然后...原创 2019-08-10 11:33:53 · 329 阅读 · 0 评论 -
Codeforces Round #580 Shortest Cycle(Floyd求最小环)
Shortest Cycle题意:给定1e51e51e5个点的a[i]a[i]a[i],任意两个点i,ji,ji,j之间存在无向边当且仅当a[i]a[i]a[i] & a[j]!=0a[j]!=0a[j]!=0,求周长最小的环思路:将所有的a[i]a[i]a[i]看作二进制形式,则若两个点之间没有边,说明二者的二进制位没有公共的111;同时,若所有的点没有形成环,说明在63636...原创 2019-08-19 09:58:41 · 220 阅读 · 3 评论 -
牛客多校2019-7H-Pair(两个数的数位DP)
Pair考场上加了各种各样的优化也没能由T变AC。。。赛后题解“直接数位DP就行”题意:给定A,B,CA,B,CA,B,C求满足。。。还是看下面的题目描述吧。思路:直接数位DP就行,但需要注意的是!两个数的数位DP对于不保存的情况只有两个数都达到上限时,其余的都需要记忆化。比如一个数达到上限,另一个没有达到上限的情况。当然,也可以全部都保存下来,也不怎么费空间题目描述:Given...原创 2019-08-09 09:55:36 · 152 阅读 · 0 评论 -
2-3-4 Tree
2-3-4 Tree 介绍插入函数(按执行顺序):若当前为4-node节点考虑将中间的数拿出来放到father节点里,并将剩下两个数拆开分成连个2-node节点(若将中间的数放到father节点里后又构成了一个4-node节点,则不需要继续拆分)如果当前节点为根节点,即没有father节点,则考虑新建一个root节点若当前节点为叶子节点,则直接插入其他情况从当前节点向下找位置迭...原创 2019-08-31 20:31:20 · 785 阅读 · 0 评论 -
Continuous Intervals(线段树+单调栈)
Continuous Intervals线段树好题呀!比赛的时候根本看不出来,赛后惊叹“学到了!”题意:给定一个数组,求数组内有多少连续区间。“连续区间”的定义:将区间内数字按大小排序后,相邻元素差值不大于1,可以等于0。思路:绝妙的思路!线段树+区间修改+区间最小值及最小值个数+单调栈可以将“连续区间”的定义等价为:区间最大值−-−区间最小值+1+1+1−-−区间不同数字的个数=0=0...原创 2019-09-01 22:29:52 · 388 阅读 · 6 评论 -
query(2019徐州网络赛)(一点思维+树状数组)
query这题和HH的项链简直是异曲同工之妙,只不过预处理不同,此题略巧妙些题意:给定一个111~nnn的全排列,然后有mmm个询问,每次询问求[l,r][l,r][l,r]内满足条件的pairpairpair有多少对。条件为:pair(a,b)pair(a,b)pair(a,b)满足一个数是另外一个数的倍数即可思路:记录好每个数字的位置预处理出每个数对哪些数字有贡献,并将所有有贡献的...原创 2019-09-07 22:40:54 · 421 阅读 · 0 评论 -
Fire-Fighting Hero(2019南昌网络赛)(最短路+新建源点)
Fire-Fighting Hero赛后自己写了一个。。。因为舍不得开大数组,挂了三次。。。好在场上是队友做的,1A1A1A,hhh题意:英雄从给定的sss点出发,求到所有点的最短路径最大值;消防员从kkk个出发点随便选一个出发,求到所有点的最短路径最大值;并拿上面两个最大值进行比较,然后是“若,否则”的形式。思路:显然对于英雄来说直接跑一个单源最短路即可对于消防员而言,可以新建一个超...原创 2019-09-09 11:18:37 · 294 阅读 · 0 评论 -
Codeforces 750E+2019南昌网络赛C(线段树维护自动机状态转移)
这个题解法之妙导致不想吐槽这场比赛了。。。原题:Codeforces 750E New Year and Old Subsequence复现:2019南昌网络赛C题 Hello 2019原题题意:给定一个数字串,多次询问,每次询问使[l,r][l,r][l,r]区间内存在"2017"这个序列,而不存在"2016"这个序列,至少需要删除多少个元素(无解输出−1-1−1)复现题意:给定一个数字...原创 2019-09-09 21:56:48 · 289 阅读 · 1 评论 -
Rotate Columns(CodeForces Round #584)(状压DP)
Rotate Columns题意:给定一个矩阵,可以对矩阵的任意列进行上下滑动(或称旋转),使最大化每一行的最大值 之和。EasyEasyEasy versionversionversion:n≤4n≤4n≤4,m≤100m≤100m≤100HardHardHard versionversionversion:n≤12n≤12n≤12,m≤2000m≤2000m≤2000思路:直接讲Har...原创 2019-09-16 20:47:15 · 274 阅读 · 0 评论 -
Into Blocks(CodeForces Round #584)(优雅的贪心)
Into Blocks(不带修改的EasyEasyEasy版本)题意:给定一个序列,通过改变其中的数字使所有相同的数字在数组中都是相邻的,改变数字的方式为:将数组中某个数字全部修改为另外一个数字。求最少需要改变的元素思路:由于最终状态肯定是“一块一块”的,每一块中都是一样的数字因此考虑预处理每种数字最靠右的位置,然后从左到右扫描整个序列扫描的过程中以出现的数字的最靠右的位置为界限,并且...原创 2019-09-16 21:01:33 · 126 阅读 · 0 评论 -
Counting Sequences I(2019上海网络赛D)(暴力dfs or 打表)
Counting Sequences I拿着OEIS上的一个类似的序列(当时以为是相同的)怼了半天。。。欲哭无泪题意:问有多少长度为nnn的正整数序列满足它们的和等于它们的积(每一位置对应相同认为是同一序列)思路:没啥思路,暴力即可首先,序列中不等于111的值不能太多,比如2122^{12}212等于4096,显然乘积增长太快了!因此大多数序列都会被剪枝掉,保证了时间复杂度很低枚举的过...原创 2019-09-17 16:16:40 · 266 阅读 · 0 评论 -
Rhyme scheme(2019上海网络赛)(贝尔数+dp+dfs)
Rhyme scheme赛后:原来就这么个简单题!题意:给定nnn和kkk,求大小为nnn的集合的第kkk小字典序划分(输出格式见下方题面)思路:令大小为iii的集合在选择第jjj个位置时左边已经有kkk个集合为dp[i][j][k]dp[i][j][k]dp[i][j][k]则dpdpdp的转移方程为:dp[i][j][k]=dp[i][j+1][k+1]+k∗dp[i][j+1][...原创 2019-09-17 19:23:28 · 313 阅读 · 0 评论 -
洛谷-P1169 棋盘制作(悬线法)
国际象棋是世界上最古老的博弈游戏之一,和中国的围棋、象棋以及日本的将棋同享盛名。据说国际象棋起源于易经的思想,棋盘是一个8×88×88×8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳。而我们的主人公 小Q小Q小Q ,正是国际象棋的狂热爱好者。作为一个顶尖高手,他已不满足于普通的棋盘与规则,于是他跟他的好朋友 小W小W小W 决定将棋盘扩大以适应他们的新规则。小Q小Q小Q 找到了一张由N×...原创 2019-07-23 14:31:55 · 216 阅读 · 0 评论 -
洛谷-食物链(扩展域并查集)
原题地址食物链动物王国中有三类动物 A,B,C,A,B,C,A,B,C,这三类动物的食物链构成了有趣的环形。AAA 吃 B,BB,BB,B吃 C,CC,CC,C 吃 AAA。现有 NNN 个动物,以 1-N1 -N1-N 编号。每个动物都是 A,B,CA,B,CA,B,C 中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这 NNN 个动物所构成的食物链关系进行描述:第一种说...原创 2019-07-12 11:09:13 · 146 阅读 · 0 评论 -
牛客-game with numbers(筛法)
原题地址game with numbers给定大小为nnn的集合SSS一个数被称作合法的,当且仅当x∈Sx∈Sx∈S或者xxx存在大于1的真因数,且这些真因数均是合法的求有多少个数xxx满足2≤x≤m2≤x≤m2≤x≤m且xxx合法PS:xxx的真因数指不是xxx本身的约数T组数据每组数据给定n和mn和mn和m接下来一行nnn个数字,表示集合SSS思路:先将范围内所有数的真因数个...原创 2019-07-12 09:38:15 · 111 阅读 · 0 评论 -
线段树(附究极详解)
http://blog.csdn.net/zearot/article/details/48299459原创 2019-03-16 18:38:22 · 366 阅读 · 0 评论 -
最短路(最长路)
Dijkstra注意:不能处理负边权, 有负边权就换SPFA。以下代码以HDOJ 1874(畅通工程续) 为例简洁好理解的堆优化代码。#include<cstdio>#include<algorithm>#include<cstdlib>#include<cmath>#include&l原创 2019-03-12 18:34:14 · 410 阅读 · 0 评论 -
网络流(持续更新)
最大流模板(记忆两种)白书模板#include<cstdio>#include<algorithm>#include<cstdlib>#include<cmath>#include<cstring>#include<cctype>#include<string>#include<vector...原创 2019-04-04 08:30:36 · 210 阅读 · 0 评论 -
图论(要点)
独立集独立集是指图的顶点集的一个子集,该子集的导出子图不含边.如果一个独立集不是任何一个独立集的子集, 那么称这个独立集是一个极大独立集.一个图中包含顶点数目最多的独立集称为最大独立集。最大独立集一定是极大独立集,但是极大独立集不一定是最大的独立集。支配集与独立集相对应的就是支配集,支配集也是图顶点集的一个子集,设S 是图G 的一个支配集,则对于图中的任意一个顶点u,要么属于集合s, 要么与...原创 2019-04-04 09:19:08 · 384 阅读 · 0 评论 -
二分图匹配(持续更新)
二分匹配核心算法:匈牙利算法(最大流的写法后续更新)先上匈牙利算法基础模板(求最大匹配数)bool lj[MAXN][MAXN], vis[MAXN];int link[MAXN];int n;bool find(int x) { //算法核心,深搜操作 for(int i=0; i<n; ++i) { if(lj[x][i]&&!vis...原创 2019-03-28 18:34:42 · 191 阅读 · 0 评论 -
2-Sat
2-Sat 算法简介什么是2-SAT呢?就是有一些集合,每个集合中有且仅有两个元素,同时每个集合需要选择一个作为代表,集合间的元素存在一定的选择关系,求解可行性及可行方案。关键:连边2-SAT算法本身并不难,关键是连边,不过只需要充分理解好边的概念:a->b即选a必选b。(也即连单向边)a、b不能同时选:选了a就要选b’,选了b就要选a’。a、b必须同时选:选了a就要选b,选...原创 2019-04-11 15:12:44 · 275 阅读 · 0 评论 -
拓扑排序总结(Kahn算法)
逃生Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 5 Accepted Submission(s) : 4Problem Description糟糕的事情发生啦,现在大家都忙着逃命。但是逃命的通道很窄,大家只能排成一行。现在有n...原创 2019-04-12 22:36:12 · 680 阅读 · 0 评论 -
稳定婚姻匹配(Stable Match, HDOJ 1435, HDOJ 1914, 详解)
稳定婚姻匹配Stable MatchTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1236 Accepted Submission(s): 583Special JudgeProblem DescriptionNetwo...原创 2019-05-01 10:01:05 · 1011 阅读 · 0 评论 -
最大团+极大团计数(HDOJ 1530+POJ 2989, Bron-Kerbosch )
极大团:一个无法被更大的强连通分量包含的强连通分量因此单个顶点也可能是一个极大团最大团:一个包含顶点数最多的极大团定理:最大独立集=补图的最大团,最大团=补图的最大独立集Bron-kerbosch模板说明all-已取顶点集,some-未处理顶点集(初始状态是全部顶点),none-不取的顶点集,g-边,S-极大团数量,ans-最大团结点数;结点编号1~n,0用于辅助,表示被删除;求...原创 2019-05-01 11:18:33 · 635 阅读 · 0 评论 -
树的重心和直径
树的重心表达原理的代码#include "bits/stdc++.h"using namespace std;const int maxn = 20000;const int INF = 2e9;int N;vector<int> tree[maxn+5];int d[maxn+5];int minNode;int minBalance;void dfs(...原创 2019-05-30 16:54:25 · 1232 阅读 · 0 评论 -
数位dp练习题
随便记录几个题, 防止连数位dp的思路都忘了,2333数位dp先将上限各位保存到num数组从高位到低位dfs(暴力)记忆化,优雅的暴力,否则就是O(n)的算法了,对单个数据也有很大的加速pos为-1时以及记忆存在时可直接返回关键:时刻记住判断条件,做到不重不漏HDU 3652 B-numberB-numberTime Limit: 2000/1000 MS (Java/Oth...原创 2019-06-08 23:51:26 · 572 阅读 · 0 评论 -
强连通分量-tarjan缩点
HDU 1269 迷宫城堡这题直接缩点,如果缩成了一个点,则Yes,否则No。迷宫城堡Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25366 Accepted Submission(s): 10863Problem De...原创 2019-06-09 11:55:01 · 140 阅读 · 0 评论 -
奇偶染色、二分图着色
利用DFSconst int maxn = 1e4+10;vector<int> g[maxn];int n; //顶点数int color[maxn]; //顶点i的颜色,1 or -1bool dfs(int v, int c) { color[v]=c; for(int i=0; i<g[v].size(); ++i) { in...原创 2019-06-21 12:56:54 · 432 阅读 · 0 评论 -
手写读入加速
读入int 类型使用方法 a[i] = read();不用在乎数字前面的空格、换行之类的inline int read(){ int x=0,sign=1; char c=getchar(); while(c>'9'||c<'0'){ if(c=='-') sign=-1; c=getchar(); } while(c>='0'&&c...原创 2019-06-21 23:07:55 · 274 阅读 · 2 评论 -
My HelloWorld!
#include "bits/stdc++.h"using namespace std;typedef long long ll;typedef pair<int,int> pr;const int maxn = 1e5+10;const int mod = 1e9+7;const double eps = 1e-9;inline int read() { ...原创 2019-06-23 19:26:17 · 186 阅读 · 0 评论 -
LCA(最近公共祖先)
洛谷最近公共祖先模板题题目描述:给出一棵有NNN个节点的树,有MMM个询问,每个询问为u,vu,vu,v节点LCAN,M<=5e5N,M<=5e5N,M<=5e5倍增实现复杂度:O(nlogn)O(nlogn)O(nlogn)此模板最小节点标号为1#include "bits/stdc++.h"using namespace std;typed...原创 2019-07-03 18:25:22 · 189 阅读 · 0 评论 -
树状数组求区间最值
闲谈一下树状数组最基本的功能是加速前缀和的更新。求一个数组的前缀和本来是O(n)的复杂度,用树状数组则为O(nlogn)。但树状数组优点在于单点更新时复杂度为O(logn),而正常的为O(n),这也就使得树状数组能够进行大规模的更新。虽然查询速度(O(logn))稍有些慢(相对于O(n)而言),但依旧可以用于大规模的查询。总之,遇到有不断更新的数组前缀和时可以考虑树状数组。树状数组求区...原创 2019-06-29 12:27:16 · 4814 阅读 · 6 评论 -
树状数组(一维+二维)
树状数组原理思想利用二进制提高对大数组的操作速度,但存储空间不变,依旧需要开出原数组大小。主要函数(lowbit、add、sum)1.lowbit(int a)用途:提取数字a的最低位1;原理:理解a&amp;amp;amp;amp;amp;amp;amp;amp;(-a);代码:int lowbit(int i) { return i&amp;amp;amp;amp;amp;amp;amp;amp;(-i);}2.add原创 2019-03-05 20:49:44 · 344 阅读 · 0 评论