![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Luogu
给我一瓶AC钙
是一颗萌菜没错了
展开
-
(Luogu) P3121 [USACO15FEB]审查(黄金)Censoring (Gold) (AC自动机)
传送门题意:给你匹配串,然后有很多模式串,要删除匹配串中所有的模式串(删除的过程中,可能会出现新的模式串解:匹配的过程中,我们可以用个栈去记录,一旦匹配,减去长度,就可以回去到删除后最后一个字符的节点处#include<bits/stdc++.h>#define il inline#define pb push_back#define ms(_data,v) mem...原创 2019-10-12 21:41:34 · 166 阅读 · 0 评论 -
(Luogu) P1052 过河 (状压dp)
传送门解题思路:这题的状态转移方程还是很好想的,dp[i]代表跳到第i点踩到的最少石头,dp[i]=dp[i-j]+stone[i],j位距离,即跳j个距离到i点,stone[i]表示这里是否有石子。但是这里l非常大,只是循环也会超时,所以需要状态压缩。这里压缩的方法有90缩,72缩(戳我)还有2520缩,这里我写的是2520缩,这个很好理解,2520是1~10的最小公倍数,就是从i点出发,...原创 2019-01-16 16:47:24 · 164 阅读 · 0 评论 -
(Luogu) P1441 砝码称重 (搜索+动态规划)
传送门解题思路:搜索出舍弃的方案,然后计算这种情况下能表示多少不同的数字,这里用一个动态规划,dp[i][j]:代表到第j个数,可以组成i这个数,则为true,反之则为false。最后只要知道dp[][n]有剁少个true则可以组成多少个数字。这里可以将二维压缩成一维,第二层循环稍微优化一下。#include<cstdio>#include<iostream>...原创 2019-02-16 14:36:15 · 316 阅读 · 0 评论 -
(Luogu) P1373 小a和uim之大逃离
传送门解题思路:这里dp要开4维,dp[i][j][t][p] 代表在 (i,j) 差值为t,p为角色(0为a,1为uim) 选择的方案数 。这样我们只要把dp[i][j][0][1]加起来就是所求的方案数了,其实条件是 dp[i][j][a[i][j]%(k+1)][0]=1; 因为每个点都可以为起点。如何更新状态的,我们这样规定 (A-B+k+1)%(k+1)=t%(k+1) (A为小...原创 2019-02-17 12:25:52 · 167 阅读 · 0 评论 -
(Luogu) P2279 [HNOI2003]消防局的设立
传送门解题思路:此题可以树形dp也可以贪心过,看了第一篇题解,非常nice!贪心的策略也很好想,我们从深度最大的开始,他没有孩子孙子,我们自然选择去建立他的祖父,这样可以覆盖到更多的点,我们如何去判断点是否已经被覆盖到了呢,可以开一个o数组 o[i]表示 i到最近的消防站的距离 初始化为 0x3f3f3f3f 。代码如下:#include<cstdio>#include&l...原创 2019-02-17 15:23:51 · 158 阅读 · 0 评论 -
(Luogu) P1273 有线电视网 (树型dp+分组背包)
传送门题目描述某收费有线电视网计划转播一场重要的足球比赛。他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点。从转播站到转播站以及从转播站到所有用户终端的信号传输费用都是已知的,一场转播的总费用等于传输信号的费用总和。现在每个用户都准备了一笔费用想观看这场精彩的足球比赛,有线电视网有权决定给哪些用户提供信号而不给哪些用户...原创 2019-02-18 13:57:22 · 126 阅读 · 0 评论 -
动态规划——悬线法 (P1169 棋盘制作 p4147 玉蟾宫 p2701 巨大的牛棚 p1387 最大正方形)
学习于luogu p1169 第一篇题解悬线法用途: 解决给定矩阵中满足各种条件的最大子矩阵做法: 用一条线(横竖貌似都行)左右移动直到不满足约束条件或者到达边界定义数组: le[i][j]: 代表从(i,j)能到达的最左位置 ri[i][j]: 代表从(i,j)能到达的最右位置 up[i][j]: 代表从(i,j)向上扩展最长长度.预处...原创 2019-02-18 16:54:51 · 217 阅读 · 0 评论 -
(Luogu) P1993 小K的农场 (差分约束)
传送门解题思路:这是一道差分约束的裸题,我也是第一次接触差分约束,(详细解说戳我)简单来说,就是将不等式 与 spfa里的松弛操作联系起来,给予他意义,这样就可以用图的方式来解决他了,观察等式 a-b<=k ,这个式子可以变成 a<=b+k 这个式子是不很像spfa里的松弛操作if(d[v] < d[u] + w(u,v) ) { d[v] = d[u...原创 2019-02-24 15:20:31 · 155 阅读 · 0 评论 -
(Luogu) P1525 关押罪犯 (并查集)
传送门题目大意:1~n个人,一张关系网,连线权值代表起冲突的影响力,将n个人分成两部分,求最小的冲突事件影响力。如图答案为3512.解题思路:我们当然不希望权值大的边存在,所以将边从大到小排序,逐个处理,边所对的两方各为敌方,我们应该将一个人和他敌人的敌人并到一个集合,每一次合并都相当于去掉了这条边,从大到小去,当发现了这条边的两段已经在一个集合了,说明在前面合并去掉大边的时候,合并了...原创 2019-02-19 12:53:22 · 125 阅读 · 0 评论 -
(Luogu) P2024 [NOI2001]食物链 (并查集)
传送门解题思路:将并查集分为三个部分 分别是同类,猎物 ,天敌,取x(x属于1~n)举个栗子,与x一块的为x的同类,与x+n为一块的为x的猎物,与x+2*n为一块的为x的天敌。我们只需要同时维护这三个部分,并用来判断假话即可。由于只有A,B,C三种动物,那么A猎物的猎物就是A的天敌这需要注意维护。代码如下:#include<cstdio>#include<iostre...原创 2019-02-19 15:43:28 · 133 阅读 · 0 评论 -
(Luogu) P2922 [USACO08DEC]秘密消息Secret Message (字典树)
传送门解题思路:查询前缀的个数,典型的字典树问题(字典树入门和例题),给你一个前缀,如果单词(都称为单词了)与这个前缀的前部分重合时,res也++,这是需要注意的,例如:前缀10111,那么101也算一个答案;用一个sum数组记录到root这个点为前缀个数,同时flag数组为以root为结尾的单词的个数(flag从标记结尾,变成个数,因为可能有相同的单词数),查询前缀时,遇到flag不为0,那...原创 2019-02-20 11:42:59 · 119 阅读 · 0 评论 -
(Luogu) P1801 黑匣子_NOI导刊2010提高(06)(堆)
传送门解题思路:用一个大顶堆维护前k小元素,查询那就把堆顶输出就好了,再用一个小顶堆维护其他的比较大的值(小顶堆中的值都大于大顶堆的值),因为k是变化的,每次值先放进小顶堆,如果大顶堆的size<k,那就用小堆顶填大顶堆直到它的size==k,其次当小顶堆堆顶的值小于大顶堆堆顶时,也需要更新。STL中实现好的堆heap#include<bits/stdc++.h>#d...原创 2019-03-29 21:29:14 · 130 阅读 · 0 评论 -
(Luogu) P3369 【模板】普通平衡树/P3391 【模板】文艺平衡树(Splay)
P3369 【模板】普通平衡树#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<queue>#include<stack>#include<map&g...原创 2019-05-05 16:58:42 · 126 阅读 · 0 评论 -
(Luogu) P1430 序列取数 (区间dp)
传送门题意:给定一个长为n的整数序列(n<=1000),由A和B轮流取数(A先取)。每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取。所有数都被取走后,两人分别统计所取数的和作为各自的得分。假设A和B都足够聪明,都使自己得分尽量高,求A的最终得分。思路:看视频讲的这道题,喵啊,按照他的思路写了出来。取数肯定是取一段连续的序列,剩下一段连续的序列。首先定义F[l][...原创 2019-05-19 21:58:48 · 216 阅读 · 0 评论 -
线段树套平衡树基础模板
P3380 【模板】二逼平衡树(树套树)要开O2才能过T_T#include<bits/stdc++.h>#define il inline#define pb push_back#define ms(_data,v) memset(_data,v,sizeof(_data))#define SZ(a) int((a).size())using namespace...原创 2019-08-22 21:16:34 · 180 阅读 · 0 评论 -
(Luguo) P3401 洛谷树 (树链剖分+线段树)
传送门解:首先异或也是具有前缀性质的,b[i]代表从i点异或到根节点的值,那么i到j的异或和就是b[i]^b[j],但是题目求得是i~j路径上所以子路径的异或和,显然是不能一个一个的求,思路也很巧妙,我们将这条路径上所有的b[]拿出来,对每一位进行维护,看看这些数在这一位上有多少1,和0,那么这一位对结果的贡献不就是(1<<i)*num1*num0吗;还有修改,首先修改影响的肯定是...原创 2019-09-07 10:37:08 · 317 阅读 · 0 评论 -
(Luogu) P1439 【模板】最长公共子序列
传送门这题怎么能叫模板呢,分明是个变种题解题思路:dp呀,这不是肯定dp嘛,dp[i][j]指的是a串到第i个字符,b串到第j个字符的最长公共子序列,看一眼数据,还要把二维优化成一维。代码如下#include<iostream>#include<algorithm>#include<string>#include<cstring>...原创 2019-01-21 14:44:45 · 225 阅读 · 0 评论 -
(Luogu) P2258 子矩阵 (搜索+动态规划)
视频讲解戳这里 (bj聚聚讲的可好了)传送门解题思路:这题一看和最大子矩阵很类似。但是要比那题更加的复杂,考虑时有诸多细节。思路就是先把行确定下来,这里用一个搜索,然后再去考虑列,考虑列的时候,我们需要预处理我们所选行 的竖直的分值(即题目定义的相邻元素差的绝对值)和横置的分值。需要两个数组,横置 line[i][j]代表 第i列和第j列横向的之差的绝对值之和;竖直col[i],代表第i列...原创 2019-01-18 21:57:47 · 236 阅读 · 0 评论 -
(Luogu) P1736 创意吃鱼法
传送门解题思路:对角线可以是从左上角到右下角,也可以是从右上角到左下角,所以答案需要求两次,去最大的。先讨论从左上角到右下角。dp[i][j]为以(i,j)点为右端点的能吃到的最多的鱼,由于需要子矩阵的其他地方没有鱼,所以需要两个辅助数组,分别统计(i,j)这点向上有多少个连续的0,向左有多少个连续的0。所以我们可以得到 dp[i][j]=min(dp[i−1][j−1], up[i−1][j...原创 2019-01-13 15:37:55 · 118 阅读 · 0 评论 -
(Luogu) P1983 车站分级 (拓扑最长有效路径)
传送门做这个题的第一步是先思考应该如何建图,停靠的站之间是没有严格的大于小于关系的,所以直接连边的话是不利于等级的划分的。所以再仔细考虑一下,我们应该是在起点到终点之间, 连接停靠的车站和没有停靠的车站,因为停靠的车站等级必定是严格大于未停靠车站的等级。根据这个严格的大小关系我们可以建有向图。可以从低的指向高的,也可以从高的指向低的,结果是一样的。这里我建图是从低等级的指向高等级。然后跑一...原创 2018-12-04 09:05:09 · 162 阅读 · 0 评论 -
(Luogu) P1341 无序字母对(欧拉路径)
传送门这个题是放在图论板块的,所以我们可以很容易想到建图。但是如果这道题直接给我,我肯定会认为这是一道单纯的字符串,并不会与图论扯上关系。用图的思想建个图,题目一下就变得清晰起来,这变成了一个一笔画问题,那么就要求可以走一个欧拉回路或者欧拉路径。第一步,判断,1.如果有不只一个联通块,pass。2.有不等于2个奇数度点,pass第二步,确定起点,如果是有两个奇数度点,则一个是起点,一个...原创 2018-12-03 21:23:09 · 124 阅读 · 0 评论 -
(Luogu) P1434 [SHOI2002]滑雪
https://www.luogu.org/problemnew/show/P1434#sub这个题如果直接bfs或者dfs,因为每个点都要搜,所以必定会T,可以用个数组,类似记忆化搜索,去减少搜索时间#include<bits/stdc++.h>using namespace std;const int maxn=1e3+5;int R,C,ans;int Map[...原创 2018-11-06 18:14:56 · 286 阅读 · 0 评论 -
(Luogu) p1020导弹拦截
https://www.luogu.org/problemnew/show/P1020dp的做法,复杂度是 O(n^2),只能得100分,一个dp求的是最长下降子序列长度,一个dp求的是最少有多少个最长不上升序列,#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;int f[maxn];in...原创 2018-11-06 14:34:23 · 169 阅读 · 0 评论 -
(Luogu) P1087 FBI树 P1030 求先序排列
https://www.luogu.org/problemnew/show/P1087#include<bits/stdc++.h>using namespace std;string s[4000],ff;int N;void pd(string xx){ bool flag0=0,flag1=0; for(int i=0;i<xx.size();++i){...原创 2018-10-19 19:24:25 · 186 阅读 · 0 评论 -
(Luogu) P1032 字串变换
题目链接 https://www.luogu.org/problemnew/show/P1032AC代码#include<bits/stdc++.h>using namespace std;string A,B;int N=0,maxlen=0,minlen=1e6+5;//maxlen,minlen为最长长度 ,最短长度 string a[7],b[7];int ...原创 2018-10-19 16:38:43 · 135 阅读 · 0 评论 -
(Luogu) p1147 p1029
P1147 连续自然数和#include<bits/stdc++.h>using namespace std;typedef long long ll;ll sum[1000000];int main(){ ll n; cin>>n; for(int i=1;i<=1000000;++i){ sum[i]=sum[i-1]+i; } int...原创 2018-10-05 19:50:04 · 123 阅读 · 0 评论 -
(Luogu) 逆序队个数问题
P1908 逆序对https://www.luogu.org/problemnew/show/P1908思路 归并排序:(即使序列存在相同元素,该算法也适用,且代码不用修改)归并排序是将数列a[l,h]分成两半a[l,mid]和a[mid+1,h]分别进行归并排序,然后再将这两半合并起来。在合并的过程中(设l<=i<=mid ,mid+1<=j<=h),当a[i]&l...原创 2018-10-04 20:14:39 · 159 阅读 · 0 评论 -
(Luogu) p1162 p1019
很久没做搜索题了,做了两道1.p1162填涂颜色 https://www.luogu.org/problemnew/show/P1162很明显的宽搜题。不过不好从要求的搜索,从边界搜索易解。#include<bits/stdc++.h>using namespace std;int n;int a[40][40];int x[]={0,0,1,-1};int y...原创 2018-10-04 20:11:06 · 268 阅读 · 0 评论 -
(Luogu) P1462 通往奥格瑞玛的道路(二分 + Spfa/Dijkstra)
传送门题意:一个联通的无向图,通过每一个点会收费,通过每一条边会减少血量。求能到达终点 (即血量到终点还不为0) 的各个路径上,收费最高的最小值。思路:首先一开始的思路是找到所有能到终点的路径,然后取每条路径上的最高收费,比较取最小值,数据量大,pass;再思考,他求的是最大的最小值,那我们可以想到二分,去二分路径上的最高消费,然后判断这样能不能走到终点。判断的函数就可以考虑Spfa和Di...原创 2018-12-05 15:04:12 · 203 阅读 · 0 评论 -
(Luogu) P1119 灾后重建
传送门题意:查询q次求一个村庄到另一个村庄的最短路,但这个题目又加了一个重建的条件,只有当一条路联通的两个村庄 (规定了村庄在第几天被修好) 都被修好这条路才可以通,所以点到点的最短距离又受制于时间t。思路:查询是点到点在第t天的最短距离。首先这是多源最短路,各个村庄之间的最短距离我们都要知道,选用floyd食用最佳。接下来去解决时间t的问题。首先这个问题好的一点就是,村庄的重建好的时间是...原创 2018-12-06 18:50:52 · 160 阅读 · 0 评论 -
(Luogu) P1967 货车运输(kruscal + lca)
传送门题目大意:城市与城市之间有道路相连,并且道路有着限重,q次查询问,从x到y车的最大载重量,不能到达就输出-1.解题思路:这道题有很多种解法,但这道题放在了倍增里,自然而然想着用倍增的方法去做,对于才初步了解这个算法的我来说,还是有点困难的。其实如果城市与城市之间有多条路径可以抵达,那只要保留那条载重最大的那条路径就行了。所以我们自然而然可以在它给的图上跑kruscal,跑出一颗最大生...原创 2018-12-20 21:40:50 · 116 阅读 · 0 评论 -
(Luogu) P1080 国王游戏 (贪心)
传送门解题思路:一开始单纯的直接按照左手升序或者右手降序,这种想法必然是不准确的,但是能得30分,那么应该如何判断哪些大臣应该被排在前面呢,现在我们不如直接从所有的大臣种先选出两位来判断。属性 左手 右手 皇上 X1 Y1 大臣甲 X2 Y2 大臣乙 X3 Y3 如果是这样的话,那答案就是有两种排序方式max(X1/Y2,...原创 2018-12-23 14:27:39 · 288 阅读 · 0 评论 -
(Luogu) P1582 倒水 (简单数学)
传送门题目描述:一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以到达目标。现在CC想...原创 2018-12-23 16:51:27 · 249 阅读 · 0 评论 -
(Luogu) P1463 [POI2002][HAOI2007]反素数 (打表 || 搜索)
传送门解题思路:这题一看数据就不可能暴力的,但是我们可以先打个表试一下,发现题目所求的反质数分布非常的稀疏。所以解法一就是打表,打表有3种方法:解法一:一:直接暴力枚举因子(这种应该没什么人去做吧,太慢了)二:枚举到sqrt(i),但是对于这么大的数据显然还是太慢了。三:一个性质,约数个数定理:一个正整数n,可以分解成 (p1,p2...pn为素数)那这个数的约数个数为(...原创 2019-01-17 15:34:47 · 187 阅读 · 0 评论 -
(Luogu) P2921 [USACO08DEC]Trick or Treat on the Farm( Tarjan求强联通分量 )
传送门虽然看题解很多大佬并没有用Tarjan来做这一题,但是这个问题用Tarjan求强联通分量来解决这题还是很清晰的,如果一头牛在一个强联通分量里,那它可以拿的糖果就是这个强联通分量的点数。反之由于牛走的的方向只有一个,那就直接深搜到第一个强联通分量,加上这个强联通分量的点数就是它可以拿到的糖果。跑强联通分量的同时,就可以知道某个点属于哪一块,并且一块有多大。注:自环的点要先处理一下,...原创 2018-12-04 19:11:53 · 159 阅读 · 0 评论