摘要: ###思路 对于这道题,我们从题目里可以知道,蓝色代表的方块为0,红色代表的方块为1。按照题目要求,如果换一种说法,那就是对于一个2*2的方格,其中1的个数必定有奇数个,这样的话,每个方格里的所 有数的异或和必定为1(00=0 , 10=1 , 1^1=0)。那么对于每一个格子$a(i,j)$,都有 阅读全文
posted @ 2020-07-26 20:35 Shadow_hyc 阅读(258) 评论(0) 推荐(0)
摘要: ###思路 很好,这又是一道模板。 求割点的tarjan和求强连通分量的tarjan原理相同,但是实际写法并不完全相同。要注意的是,对于一个点u,它在不同情况下要满足以下两个条件才能称之为割点: (1)low[v]>=dfn[u](v是u在搜索树上的儿子,且u不在环中) (2)u在搜索树上有两个以上 阅读全文
posted @ 2020-07-26 20:27 Shadow_hyc 阅读(127) 评论(0) 推荐(0)
摘要: ###思路 这个题不难,就是先Trajan缩点减小点数和边数的规模,然后在缩完点的图上跑DP即可。注意要用toposort解决DP后效性(或者是使用记忆化搜索)。 Code #include<iostream> #include<cstdio> #include<algorithm> #includ 阅读全文
posted @ 2020-07-26 20:22 Shadow_hyc 阅读(81) 评论(0) 推荐(0)
摘要: ###思路 树状数组,顾名思义,就是要把一个数组的存储形式抽象成一棵树的形式,来高效地完成一些在数组中的操作。那么树状数组的原理是什么呢?我们可以尝试将数组下标(假设从1开始编号)转化成二进 制数,则1,2,3,4,5,6,7,8分别对应着二进制的1,10,11,100,101,110,111,10 阅读全文
posted @ 2020-07-26 20:18 Shadow_hyc 阅读(150) 评论(0) 推荐(0)
摘要: ###思路 这道题虽然和线段树1同是线段树模板题,但是这道题的难度我个人感觉是比1提高了,主要就是在有关lazytag的处理和运算方面更加复杂。 这道题的有两种修改操作,一种是区间加,一种是区间乘。这就会导致我们使用一个lazytag无法解决所有的问题,所以我们就要维护两个lazytag,一个是加法 阅读全文
posted @ 2020-07-26 20:13 Shadow_hyc 阅读(81) 评论(0) 推荐(0)
摘要: ###思路 线段树1是一道线段树的经典模板题,所涉及的线段树基础知识也比较全面,作为线段树初学者(比如我)的练手题就非常合适。这道题想让我们完成的是对一个序列的区间修改和区间查询。关于这两个操作, 我们要引入一个新的东西——lazytag。 关于线段树的一些基础写法在这里不再多赘述,我主要来讲一下有 阅读全文
posted @ 2020-07-26 20:07 Shadow_hyc 阅读(76) 评论(0) 推荐(0)
摘要: ###思路 树状数组2这道相当于是用树状数组来实现线段树的一部分功能(所以也可以用线段树来写),具体实现方法就是在树状数组上套一个差分。这看起来很简单,但是我们应该怎么做,而且又为什么要这么做呢? 至于为什么要这样做,是因为树状数组本质上只能完成单点修改和区间查询(其实单点查询也可以,只要把区间查询 阅读全文
posted @ 2020-07-26 20:03 Shadow_hyc 阅读(101) 评论(0) 推荐(0)
摘要: ###思路 这个题是近似于差分约束的模板题(稍微难一点点),差分约束我之前好像听yt神仙讲过。 不懂差分约束的自行百度。 这个题需要注意的就是在建立超级原点的时候要倒叙建边(理论上正倒序都可以,但是这个题正序过不了应该是数据造得比较奇特)。 update:2020.7.26 正序这个题是可以正常过的 阅读全文
posted @ 2020-07-26 19:57 Shadow_hyc 阅读(120) 评论(0) 推荐(0)
摘要: ###思路 (这个题当时去qbxt的时候hzwer讲过)。这个题其实涉及到一些新的知识,叫做点双连通分量(概念很简单,就是在一张连通的无向图中,对于两个点u和v,如果无论删去哪条边(只能删去一条)都不 能使它们不连通,我们就说u和v边双连通)。 这个题就是点双模板+组合数学。点双模板一会儿代码里会有 阅读全文
posted @ 2020-07-26 19:53 Shadow_hyc 阅读(118) 评论(0) 推荐(0)
摘要: ###思路 这道题其实说白了也就是一个维护最大连续长度为0的子串,再根据土木中的要求进行更新和求值即可。 我写到这就不知道该怎么说了,所以下面说的可能有些乱。 这道题维护的区间最大子段和GSS1和GSS3的区间最大子段和的维护方法相当的类似,但是由于这道题让你维护的是区间最长的连续为0的子串,而且在 阅读全文
posted @ 2020-07-26 16:59 Shadow_hyc 阅读(141) 评论(0) 推荐(0)
摘要: ###思路 这个题就是纯正的Tarjan模板题,关于难以理解的、玄学的low数组,建议感性理解。网上的解释千姿百态,啥样的都有,有的对有的错,看多了反而会晕。所以建议Tarjan模板基本的几个部分多打几遍, 熟练了就好(不建议强求理解)。 Code #include<iostream> #inclu 阅读全文
posted @ 2020-07-26 16:54 Shadow_hyc 阅读(66) 评论(0) 推荐(0)
摘要: ###思路 如果 A 认为 B 受欢迎,A 向 B 连边。 Tarjan 求强连通分量缩点后的图,出度为 0 的点若只有⼀个则 输出其代表的强连通分量的⼤⼩,否则⽆解。 Code #include<iostream> #include<cstdio> #include<algorithm> #inc 阅读全文
posted @ 2020-07-26 16:52 Shadow_hyc 阅读(106) 评论(0) 推荐(0)
摘要: ###思路 这道题很简单,其实就是一道最小生成树模板题(虽然第一眼可能看成是Floyd)。唯一需要对模板做出的改动就是把模板中的记录最小生成树边权和的操作改为取max即可。这个题看n和m的数据范围其 实Prim比Kruskal更优(Prim更适合稠密图,Kruskal更适合稀疏图),但实际上差不了多 阅读全文
posted @ 2020-07-26 16:49 Shadow_hyc 阅读(102) 评论(0) 推荐(0)
摘要: ###思路 一、种类并查集 我们发现对于任意两种动物A和B,他们之间的关系有同类、A吃B和A被B吃这三种可能。这样的话我们考虑对于每一个动物维护三个集合,分别是它的同类集合、它的猎物集合和它的天敌集合。 在考虑某句话是否是假话时,对于前两种假话(自己吃自己和超出范围)都非常好判断。那么对于第三种假话 阅读全文
posted @ 2020-07-26 16:36 Shadow_hyc 阅读(195) 评论(0) 推荐(0)
摘要: ###思路 这道题确实有含金量,值得一做。先说一下我的做题过程。 这个题本来第一眼是想用Prim+树剖LCA来做的,但是发现如果用Prim跑最大生成树的话做重构树会极其困难。舍弃。 然后想用Kruskal+树剖LCA做。但是我又悲催地发现用树剖LCA难以统计边权的最小值(虽然快啊啊啊)。舍弃。 最后 阅读全文
posted @ 2020-07-26 16:33 Shadow_hyc 阅读(90) 评论(0) 推荐(0)
摘要: ###思路 这个题要是数据范围小的话那就可以是黄题或者绿题了。但是,良心的出题人偏偏要把数据范围搞得那么大、、无语…… 这个题就是在把数据离散化之后,在把1的情况全部丢进并查集里,特判关于0的情况即可(这里可以离散化的原因是我们并不需要这些数据的真实大小,只需要知道它们的相对大小即可)。 Code 阅读全文
posted @ 2020-07-26 16:29 Shadow_hyc 阅读(83) 评论(0) 推荐(0)
摘要: ###思路 关于逆序对,我们就需要先介绍一下它的定义:在数组$a$中,若$a [ i ] > a [ j ]$ 且$ i < j$,那么我们就称 \(a [ i ]\) 和 \(a [ j ]\) 是一对逆序对。了解了逆序对的定义,我们很容易就可以想出 逆序对的一种暴力求法:遍历整个数组,找到符合定 阅读全文
posted @ 2020-07-26 16:26 Shadow_hyc 阅读(100) 评论(0) 推荐(0)
摘要: ###思路 这道题其实操作就是普通并查集的基础合并和查询操作,只是要稍稍思考一下对于 “ 我朋友的朋友是我的朋友,我敌人的敌人也是我的朋友 ” 这两句话的处理方法。 很明显的是,对于第一句话,“我朋友的朋友是我的朋友”,是很好操作的。如果读入数据告诉我们x和y这两个强盗是朋友,那么我们就把x和y所在 阅读全文
posted @ 2020-07-26 16:17 Shadow_hyc 阅读(100) 评论(0) 推荐(0)
摘要: ###思路 首先要提一下的就是,这道题有很多种做法,比如说有二分图匹配、并查集、贪心、搜索等等。出于时间原因,我这里只写二分图匹配和并查集写法。 ####一、二分图匹配(匈牙利算法) 这道题的这种做法思路比较难想(但也没有那么困难)。比较容易想到的就是把每个物品的两个属性作为两边的点,然后搞二分图匹 阅读全文
posted @ 2020-07-26 16:15 Shadow_hyc 阅读(69) 评论(0) 推荐(0)
摘要: ###思路 这道题其实并不难,充其量就是一道线段树(单点修改+区间维护最大值)的板子。但是基于严谨务实的态度,我们还是应该认真看一下这个道题。 线段树的基本写法及原理在这里不再赘述,下面我们来说一下单点修改操作。 这道题的单点修改操作跟线段树板子的单点修改不太一样,这道题的单点修改不是单纯地将一个点 阅读全文
posted @ 2020-07-26 16:09 Shadow_hyc 阅读(98) 评论(0) 推荐(0)
摘要: ###思路 现在进入正题。这道题要求我们维护区间平均数和区间方差。很显然,区间平均数是很好维护的,我们只要维护一下区间和,在求平均数的时候用区间和除以区间长度即可。那么我们怎么来维护方差呢?很 明显直接维护是不现实的,所以我们要对方差的公式进行推导: 利用我们最后推出的这个公式,我们可以看出我们只要 阅读全文
posted @ 2020-07-26 16:05 Shadow_hyc 阅读(129) 评论(0) 推荐(0)
摘要: ###思路 这个题唯一需要注意的就是不能用Kruskal,因为这是一张完全图,Kruskal需要统计边权,但是空间上显然不允许,所以只能用普通Prim(根据点更新)。 这个题实质上还是模板,只不过要稍微改一下,注意精度问题即可。 Code #include<iostream> #include<cs 阅读全文
posted @ 2020-07-26 16:00 Shadow_hyc 阅读(78) 评论(0) 推荐(0)
摘要: ###思路 这个题表面看好像是一个并查集删点操作,但是并查集貌似并没有类似的操作,只有加点和查询操作。那怎么办呢?这时候逆向思维就显得尤为重要。 我们可以考虑删点操作转化为加点操作。把题目中给出的删点序列逆转,第一次建成的并查集是执行完所有删点操作的并查集,然后按照题目中给出顺序的逆序执行加点操作, 阅读全文
posted @ 2020-07-26 15:57 Shadow_hyc 阅读(96) 评论(0) 推荐(0)
摘要: ###思路 看到有关入度出度的问题很容易想到用$toposort$来做,这个题想起来非常的简单,但是坑点不少。 读入时的阈值$u$其实如果$c > 0$(可以传递信息时)直接减去就行,不会有影响,这取决于那个$sigma$的写法,$u$没有和任何一个数相乘,只是简单的累加,所以一开始直接减去就好。 阅读全文
posted @ 2020-07-26 15:51 Shadow_hyc 阅读(110) 评论(0) 推荐(0)
摘要: ###题目描述 司令部的将军们打算在$N\times M$的网格地图上部署他们的炮兵部队。一个$N\times M$的地图由$N$行$M$列组成,地图的每一格可能是山地(用“\(H\)” 表示),也可能是平原(用“\(P\)”表示),如下图。 在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够 阅读全文
posted @ 2020-07-26 10:20 Shadow_hyc 阅读(113) 评论(0) 推荐(0)