自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 收藏
  • 关注

原创 2021.7.21

kuangbin图论专题三题一开始只想着把连通分量跑出来SCC就够了,但是欠了点什么,他这个要先对现有的王子和公主求一次最大匹配。然后将未匹配的的a类点建立一 个虚拟的节点,并且这个虚节点要和其他节点都相连。对所有的未匹配b类点也都建立一个虚拟的。然后对已经匹配好的a类点向自己匹配的b类点建边。最后对建成的图求一次SCC即可。 每个SCC里面的a类点都是里面b类点可选择的。图论好题!下午把图论方面的知识点和题目整理了一下,还有去弄省赛报名表花了点时间。...

2021-07-21 20:57:23 129

原创 2021-07-20

图论下午杭电多校晚上补题一道克鲁斯卡尔的题,其实也不完全是,不需要求出MST,但是整个算法过程是一样的,都是不断加边跑并查集,判断当前分成了几组满足则可退出。

2021-07-21 20:16:18 143

原创 2021.7.19

上午kuangbin图论一题下午打多校晚上补一题立体几何

2021-07-19 21:58:19 134

原创 2021-07-18

补昨天多校的题kuangbin图论专题之连通图

2021-07-19 21:44:46 127

原创 2021.7.16

同余最短路两题连通图两题

2021-07-16 21:34:03 82

原创 2021.7.15

把昨晚CF补了两道图论这道题和昨天的最小树形图不一样的是他要找的是一个不定顶点的最小树形图,一开始我写了个遍历所有节点跑一遍朱刘算法,不出意外应该是TLE,结果被我写WA了。。。。他这里是要用到虚根,就是往图中再加入一个点作为根节点与所有的边都连上一条边,这些边的权值都是一样的,等于图中所有边权的和加一,这样做是为了在后面判断的时候更好,加入了这n条边之后只需要跑一次,看是谁是虚根的入边就好了,如果最后算出的结果大于两倍新加边的权值证明用了两条与虚根相连的边,所以不能构成最小生成树。学习了一个新

2021-07-15 21:44:40 70

原创 2021.7.14

次小生成树,在最小生成树的基础上记录一下生成树中的选取的是哪些边,然后枚举删边,如果枚举到的边在最小生成树里直接将这条边权值减掉,如果不在的话删除这两点间简单路径中最大边就行(因为可以用枚举到的这条边代替他使得这两点之间还是有简单路径的),这个在求最小生成树的时候发现有环的时候记录一下。学习最小树形图,朱刘算法。就是求解有向图里面的最小生成树问题,对于每个点,选择它入度最小的那条边,如果没有入边的话证明这一个连通块已经孤立不可能构成最小树形图了,否则就再找环,如果没有构成环的了,就证明已经形成最小.

2021-07-14 22:18:14 81

原创 2021.7.13

今天接着刷kuangbing的图论专题,最小生成树部分。这个第一道是昨天遗留的一道最短路的题用正反向存图+2次Dijkstra,数据量很大,所以要用堆优化一开始用vector前向星存图+dijkstra+优先队列(堆优化) TLE然后换vector前向星存图+spfa TLE最后用链式前向星存图+dijkstra+优先队列才ac还看了一个新的最小生成树算法:Boruvka 算法在初始的时候他先把所有的点各自当作一个连通块,然后向外拓展一条边,这条边是这个连通块连接上外部连通块的最小的那条

2021-07-13 21:46:17 79

原创 2021.7.12

照惯例先把昨天的cf补一下接下来就是搞图论部分了,把kuangbing图论专题的题刷一刷。

2021-07-12 21:50:11 84

原创 2021.7.11

上午的话先把昨天cf的DE补了吧,今天晚上又有CF。这个E题前后模拟一编贪心就好了,昨天脑瘫了没改出来。接下来的话就接着把之前说的数据结构整一整,先是线段树吧标记永久化,如果确定懒惰标记不会在中途被加到溢出(即超过了该类型数据所能表示的最大范围),那么就可以将标记永久化。标记永久化可以避免下传懒惰标记,只需在进行询问时把标记的影响加到答案当中,从而降低程序常数在看线段树的时候看到一个新的变形–猫树:不支持修改但是可以高速查询区间信息和,感觉和st表的功能差不多。再一个就是树状数组..

2021-07-11 20:31:08 84

原创 2021.7.10

第二天,居然迟到了,闹钟响了之后不该再睡的。今天的就是把昨天剩下的动态规划。1、概率dp这种一般题目里面会有概率或期望问题。一般情况下,解决概率问题需要顺序循环,而解决期望问题使用逆序循环,如果定义的状态转移方程存在后效性问题,还需要用到高斯消元来优化。2、dp求期望3、单调队列、栈优化dp特征总结:当前状态的所有值可以从上一个状态的某个连续的段的值得到,要对这个连续的段进行 RMQ 操作,相邻状态的段的左右区间满足非降的关系。晚上补了一场之前的CF,很巧C题就是个概率DP..

2021-07-10 21:47:14 96

原创 2021.7.9

今天是暑假留校第一天,准备先复健一下。最近几个月有点摸鱼,打算把动态规划,基本数据结构(线段树,树状数组)给先整一整,然后就是之前分的图论方向,需要把几个重要的(最短路系列,tarjin,连通性相关,图的匹配,网络流)再做些题。今天的话就是先动态规划。1、记忆化搜索特征总结:①不依赖任何外部变量。可以通过有外部变量的优化过来。②答案以返回值的形式存在,不能以参数的形式存在。③对于同一组参数,其对应的答案是一致的,这也是能记忆化搜索的原因。写这种题首先可以写出他的暴搜程序,改成不需要任何外部变

2021-07-09 22:09:32 192 2

原创 差分约束

差分约束差分约束是关于求解一组特殊不等式的方法,如果一个不等式组由n个变量和m个约束条件组成,且每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统。我们的目标是通过给定的约束不等式组求出最大值或者最小值或者差分约束系统是否有解。差分约束系统可以转化为图论来解决,对于一个不等式组xj-xi<=bk,我们可以在i点与j点之间构建一条权值为bk的边,求解该图中的i点到j点的最短路,发现也是bk,这不是巧合,其实是用到了三角形不等式。之所以差分约束系统可以

2021-04-29 15:20:10 92

原创 拆点

拆点拆点顾名思义就是把点进行拆分比如一个点i就可以划分为i1,i2,i3他们都代表着i但是是不同状态下的i,本来可能只有一条与i相连的边但是通过拆点之后可能会有很多不同状态的连线,代表了i在不同的方案中的位置,拆点后的图相比于原来的图会变得更大(因为他将每种的状态的连线都画了出来)。比如网络流中的有流量限制的点的问题就可以用到拆点,可以将有限制的点拆成两点,在他们中间加上一条边,权值为限制值,就可以直接套用板子了。(还没学到网络流不展开讲了另外一个应用就是分层最短路。分层图最短路不同于常规最短路的

2021-04-28 10:06:09 417 1

原创 Codeforces Round #698 (Div. 2)

A、Nezzar and Colorful Balls根据题意相同的标号的小球不可能标记为同一个颜色,只需要输出同一标号小球数量最多为多少就可以了#include<bits/stdc++.h>using namespace std;typedef pair<int,int> pii;typedef long long ll;const int maxn = 1e6+10;const int INF = 1e8;const int mod = 1e9+7;int a[

2021-01-29 14:50:08 221

原创 AcWing 176. 装满的油箱

题意:从起点到目的地,一路上有油价不同的加油站,选择最佳的加油方案,使加油钱最少。思路:就是两种可选择的方案如果说当前还没有装满油的话,那么我们可以选择加一升汽油,然后拓展到新的状态,也就是(city,fuel+1)对于每一条边而言,我们可以通过这条边到达一个城市,那么如果说当前剩余油量可以走完这条路,那么我们就拓展新状态(Next,fuel-w)这样我们不断地取出当前花费最少的状态进行拓展,然后每一次拓展用ans数组记录最小花费即可.AC代码:#include<bits/stdc+.

2020-10-13 21:57:45 153

原创 AcWing 175. 电路维修

题意:改变最少的电线方向使得左上角和右下角连接起来。思路:也是一个最小步数模型,首先把电路板上每一个格子点看作无向图中的节点,两个节点x和y是某个小方格的两个对角,那么如果说x和y的线段是“",那么我们可以认为边权为0,反之如果x和y线段是“/”,那么我们的边权视为1,说明要旋转一次才能够连上。现在得到了一张边权0或1的无向图,那么和普通广搜一样,我们唯一的改变就是,如果说当前新状态的边权为0,那么我们就放到队头先走,因为我们要满足两端性和单调性,而为了这个单调性,如果说当前新状态边权为1,那么我.

2020-10-13 20:46:34 225

原创 AcWing 170. 加成序列

题意:给定一个数字生成一个序列要使得序列中的元素满足递增且每个数都能用他前面的两个数(可以是一个数的两倍)相加得到。思路:第一个数和第二个数肯定是1和2,然后再根据层数和数要递增这些限制来进行dfs。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6+10;int x[maxn];bool vis[maxn];int n; int dfs(int now,in.

2020-10-11 21:17:08 127

原创 AcWing 172. 立体推箱子

题意:箱子是一个长方体,有立着和躺着两种形态,给定图及各点含义,问从起点到终点的最小步数思路:图论最小步数,选择BFS进行求解,不同于常规的搜索的那四个方向,这次是一个长方体滚来滚去,有三种不同的状态,注意一点方向数组不要写错了。其他的详见代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6+10;int n,m;char mp[550][550];const.

2020-10-11 20:59:33 196

原创 AcWing 171. 送礼物

题意:找到不超过w的最大和思路:首先这道题目肯定是要搜索的,因为如果说用DP做的话,那么这个W值太大了,但是如果说只是普通搜索的话,那么O(2^N)的复杂度足以超时,而且这道题目重点就是,我们已经知道了初态而且还知道了终态,既然如此的话,我们可以选择双向搜索.根据双向搜索的性质,我们大致可以确定当前搜索的范围,首先从前一半个物品中,挑选任意多个物品,然后将这些物品的权值总和加入到数组S中,然后我们就会发现在这个S数组中有很多很多的重复的数值,既然如此,我们不妨将他们统统都删掉,至于如何删掉,相信S.

2020-10-11 11:22:42 160

原创 AcWing 167. 木棒

题意:有一堆木棒他们是从几根等长木棍切出来的,现在知道这堆木棒分别的长度,问你重组成几根等长的木棍且要求该等长最短的长度。思路:这题一开始看的时候我还以为是二分长度不断取小,结果想半天不会。这题其实是一道搜索剪枝,涉及到的剪枝其实还挺巧妙的,首先我们可以对木棒根据长度先排个序从大的开始往后用,如果遍历到他的时候用不上,在组这根木棍也就用不上了,木棒之间除了长度是没有差别的,所以我们只需在意长度大小和数量多少即可,这一波分析完TMD不就是做个桶排序吗。让后我们从最大的木棒长度枚举到所有木棒长度之和,.

2020-10-08 15:11:20 153 1

原创 AcWing 166. 数独

题意:完成数独思路:看到题目,这肯定是搜索,但是试了一发普通的直接就超时了,肯定要加一些剪枝和优化,首先是位运算优化可以将每一行,每一列,每一个九宫格,都利用一个九位二进制数保存,当前还有哪些数字可以填写,再一个我们肯定是从限制性最高的那个点开始填的,其实每次都是填限制最多的那个数,涉及到一个lowbit函数:当前得需要用lowbit运算取出当前可以能填的数字.AC代码:#include<bits/stdc++.h>using namespace std;typedef lon.

2020-10-08 11:26:49 390

原创 ACwing164. 可达性统计

题意:求出每个点可以到达的点的个数思路:就是一个简单的图的暴力,为什么拿出来讲下,是因为看题解的时候看到个东西觉得挺不错的,bitset STL里的一个东西,我们在统计可到达点时可能会有很多,所以可以借助biset里面是以二进制存储的,f[i][j]的含义是指d点i和点j之间可不可以到达,通过f[i].count()就可以统计出他的可到达点的数量。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long l.

2020-10-07 10:36:11 205

原创 ACWing 147.数据备份

题意:选取K对大楼,使得每对距离之和最小,并且一个大楼只会被链接一次思路:当k=1时肯定就是贪心的选取距离最小的那两栋。当k=2时我们是否还要留着距离最小的那一对呢?如果没有选择距离最小的那一对,那肯定要选择最小那一对的左右两对,否则就可以将其中一对换成最小的那对,那样会更小。当k>2时同理如果不选择中间的就必须选择其左右两边的,这样才能保证较小的那对我是因为实在拿不了的才放弃的,否则就可以更优。我们可以用一个双指针链表加一个set来完成这些工作,当删去中间这对时将其左右两对的权值重新加.

2020-10-06 21:51:33 321 1

原创 AcWing 145. 超市 146. 序列

题意:商品有保质期和价值,要在保质期内把商品卖出才有收入,每天只能卖一件,问产品的的最大利益是多少思路:这道题目,我们很容易发现是有一个贪心策略,也就是对于 t 天,我们需要在保证不卖出过期商品的前提下,卖出利润前t大的商品.所以呢,我们可以把商品按照保质时间排序,然后建立一个小根堆,对于每一个数而言,如果说它的过期时间大于当前小根堆的个数,那么我们可以直接将这个货物的价值加入进来,如果说当前过期时间正好等于这个小根堆堆内的个数,那么我们就需要对比一下,如果说这个货物的价值,是高于小根堆的堆顶的话,.

2020-10-06 16:24:37 126

原创 AcWing 144. 最长异或值路径

题意:找到两个点之间的路权值异或和最大。思路:将无根树扯成有根树,将根节点到每个叶子节点的路径异或权值处理出来存起来,然后我们可以遍历取max,因为从根节点到两个叶子节点的值异或起来会把中间重复路径的异或权值消去(异或的性质,相同异或为0),所以借助Trie树就可以了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6+10;int trie[maxn][2];i.

2020-10-05 21:44:08 107

原创 ACwing 142.前缀统计 143.最大异或对

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6+10;int trie[maxn][26],tot = 1,End[maxn];void insert(char *str) { int len = strlen(str), p = 1; for(int i=0;i<len;i++) { int ch = str[i]-'a'; if(trie[p.

2020-10-04 21:52:22 1074

原创 回文子串的最大长度(二分+Hash)

题意:题面意思思路:上一道兔子兔子的题目,我们知道判断两个字符串是否相等,可以使用字符串哈希,也就是将字符串算成P进制数值,然后区间和判断即可,那么这道题目我们需要一个正的字符串,还需要一个反的字符串,然后如果正字符串等于反的字符串之所以要这么做,因为我们是要回文串所以我们需要将回文拆解成为一个正字符串和一个反字符串,这样才好处理这道题目.既然如此,我们可以算出一个前缀和,再算出一个后缀和,然后就可以知道,正字符串和一个反字符串.字符串的哈希值就是这个区间的哈希值和.算完之后,我们当前就只需要枚.

2020-09-30 23:50:43 441

原创 AcWing 137. 雪花雪花雪花 138. 兔子与兔子

雪花题意:根据雪花六个角的长度判断两朵雪花是否相同。思路:属于hash表内容,根据值域建立一个一样大小的数组进行映射查找,这是hash表的关键,比如本题就可以用长度的和与乘积作为hash的规则,用这个值来归类这些雪花,如果hash值相同,再将两片雪花做精细化比对顺序是否相同。AC代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> PII;..

2020-09-28 20:21:11 196

原创 131. 直方图中最大的矩形、135. 最大子序和

这两道题解法分别是单调栈和单调队列,其实感觉这两个算法没什么区别,都是借助单调性处理问题,在于及时排除不可能的选项,保持单调性,保证策略集合是最优解。单调栈:a[n+1] = p = 0;//初始化边界 for(int i=1;i<=n;i++) { if(a[i]>s[p]) {//满足单调性直接进栈,w数组是一个策略集合 s[++p] = a[i],w[p] = 1; } else {//不满足单调性则退栈直至满足单调性 int width = 0;//记录退栈的策略

2020-09-23 21:33:52 115

原创 133. 蚯蚓

题意:相当于维护一个集合,支持查询最大值、删除最大值、插入新的值。时间卡的贼紧!!!!!!!!!!我不记得我T了几次了都思路:根据输入输出以及n、m的数据范围可以知道,需要在每秒进行切割时找出当前最大值,这时发现枚举和堆、单调队列等查找/维护最大值的方法是超时的。这时就有三个队列q1、q2和q3,如果q1开始时单调递减,每次取出最大值,然后将这个蚯蚓分开,把其中大的一部分压入q2,小的一部分压入q3,显然,此时q1、q2和q3都是单调递减的(所以每次的取出操作就可以是:在q1、q2、q3的队首取出最.

2020-09-23 21:10:42 229

原创 114. 国王游戏

题意:除第一个人以外的每个人能获得的奖赏为他之前所有人的左手乘积除以自己右手上的值(注意是之前的所有人不包括自己),通过改变顺序使得获得最多奖赏最小化。思路:贪心策略:受到奶牛的杂技这题的影响,我们发现乘积越大的要往后放除的大的也要往后放,所以我们根据左手右手的乘积从小到大排序,然后以此计算取max即可,交了之后WA了,标准答案贼大已经超出ull范围,所以还得上个高精乘除单精(顺便复习一手)。AC代码:#include<bits/stdc++.h>using namespace s.

2020-09-19 17:33:07 598

原创 105.七夕祭

题意:有一个n*m的矩阵上面是n * m个摊位,给定T个cl感兴趣的摊位的坐标,问现在能否使每行或每列上cl感兴趣的摊位个数相等,可以交换相邻两个摊位的位置每行或每列的头和尾也属于相邻。思路:因为行列之间不能交换所以行列的判断是分开的,当总的感兴趣摊位数目不能均分到每一行或每一列时,则行的方案或列的方案不可行。单独看行和列的方案,如果可行那么每行上的感兴趣摊位数量等于总的感兴趣摊位数量/行数,是一个定值,那么我们可以遍历每一行如果当前行没有达到定值就去下一行拿(下一行可以被拿成负值,下一行可以去找再.

2020-09-17 16:00:14 135

原创 112. 雷达设备

题意:海岸上有雷达可以辐射以d为半径的半圆区域,海岸之外还有岛屿,要求用最少的雷达个数覆盖所有的岛屿。思路:一开始画图的时候,一直是画雷达的辐射范围去想怎么贪心使得覆盖面积最大,一直卡着,其实可以换个角度,从岛屿的角度考虑雷达的区域只要以岛屿为中心的圆与海岸线的相交线(下图ab)中有一个雷达即可,所以问题就转化为在所有这样的ab区域内都有一个点,总的点数目还要最少。贪心策略:将所有区间(ab)按右端点从小到大排序;依次考虑每个区间:如果当前区间包含最后一个选择的点,则直接跳过;如果当前区.

2020-09-16 20:34:50 222

原创 110. 防晒

题意:让尽可能多的奶牛涂上适合自己的防晒霜思路:将所有奶牛和防晒霜分别看成两个集合中的点,如果一头奶牛可以使用某个防晒霜,则在两个点之间连一条边,那么问题就变成二分图求最大匹配了;根据匈牙利算法的原理,如果一个匹配不存在增广路径,则该匹配是二分图的一个最大匹配。也就是使得最多的奶牛涂上了适合自己的防晒霜。贪心的策略是:将所有奶牛按照 minSPF 从大到小的顺序排序,然后依次考虑每头奶牛;对于每头奶牛,扫描当前所有能用的防晒霜,选择 SPF 值最大的防晒霜来用(这样能保证最后不存在增广路径,因为.

2020-09-16 15:34:45 289

原创 108. 奇数码问题

题意:类似我们小时候玩过的数字华容道,就是有一个缺的然后可以移动变成不同的样子,本题要你解决的是从状态一能否通过移动变到状态二。思路:一开始拿到题一看这不就八数码升级版吗,然后改了下八数码代码T了,其实结论做法很简单,但是如果没做过类似的题,可能想不到这里去,这道题需要用 奇偶性。奇偶性很神奇,对于一类问题,如果属于同种性质(奇偶性相同),那么它们就是完全相同(这个在某种意义上说)的。这道题在移动方块时会改变拉直(将所有的行都排在一行)(一些移动问题都可以弄成一维来看,环的话可以断成链来考虑)之后的.

2020-09-16 10:59:24 284

原创 106. 动态中位数

题意:依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。思路:这道题出现在排序这个小标题下,一开始读完以为挺水的,但是分析复杂度发现每次都排个序取中间的复杂度(n2logn),并不可行,所以需要用到一个可以在线维护中位数的数据结构,就是堆啦,用大根堆和小根堆组成一个对顶堆,那么中位数就是两个堆种大的那个堆里的堆顶,当两个堆的数量不一致时将大的那个堆的堆顶弹出压至小的那个堆里遇到奇数就输出堆顶即可。这题注意输入和输出的格式,被卡了一发!AC代码:#inclu.

2020-09-14 21:39:46 356

原创 103. 电影

题意:给定n个人会的语言所属种类和m部电影的字幕和语音的语言所属的种类,听得懂语音会很开心,看得懂字母比较开心,问你看哪部电影很开心的人最多,相同时再让比较开心的人数最多?思路:每个人会的语言和所有电影具有的语言种类最多为2m+n(没有超出数组范围),所以我们可以将所有的语言种类排成从1到2m+n,就能用数组得出每种语言会的人数了,怎么将大范围的分布数据排成一个从1到n的紧凑排列,这不就是离散化吗!(其实后面看了别人题解用不重复map加二分查找就行了这个版本的代码也贴在后面了)。AC代码:#in.

2020-09-14 20:56:25 158

原创 F - Icebergs

题意:给定n个互不干涉的多边二维图形计算它们的面积之和。思路:关键在于求多边形的面积的方法,采用向量叉积的方法求面积,就是确定一点将他与剩下的顶点连接起来相当于分割成了若干个三角形,选取两边做叉积即可得出面积,向量带有方向计算出来之后记得取abs。这题可能还卡了精度。AC代码:#include<bits/stdc++.h>using namespace std;const int maxn =2e6+10;typedef long long ll;struct node {.

2020-09-12 12:40:42 171

原创 AcWing 95. 费解的开关

题意:给定一个5X5的灯阵,1表示灯亮着,0表示灯灭了,每次操作可以选择一盏灯并改变他的状态和他周围灯的状态(周围:上下左右)然后问你最少多少次能够使所有灯都变成亮着的状态,如果次数大于6则输出-1,否则输出最少的操作数。思路:我们可以从上往下不断的确定状态,使得除最后一行之外所有的灯变亮,最后再判断一下最后一行的灯是否都亮着,如果都亮着证明该方案可行,将答案取min更新。先来看第一行,总共有25种操作方案,所以我们全部枚举暴力不就行了吗(雾 。继续判断后面的行如果有熄灭的那么就改下一行的来达到目标.

2020-09-12 12:14:16 121

空空如也

空空如也

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

TA关注的人

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