摘要: ###思路 这道题我一开始做的时候并不会树上差分,然后就卡了好久…… 首先是树上差分,这个东西和普通序列上的差分大同小异。设$sum[i]$为差分数组,那么$sum[i]$表示的是$i$这个点到根节点上所有值的和。若要对$x \sim y$这条链上所有的点都加上$v$, 那么就要对$sum[x]+= 阅读全文
posted @ 2020-08-06 19:48 Shadow_hyc 阅读(73) 评论(0) 推荐(0)
摘要: ###思路 这道题明面上是道紫题,但是洛谷的P4145是和GSS4完全相同的一道题,而P4145是蓝题(众所周知洛谷的评分不太准)。 这道题除了一个区间对每个数开方的操作,其他都与线段树模板无异。那么如何实现区间对每个数开方的操作呢? 很显然,直接想是很难想出来的,而事实上这道题也没有什么可以用的特 阅读全文
posted @ 2020-07-28 10:02 Shadow_hyc 阅读(112) 评论(0) 推荐(0)
摘要: ###思路 //由于GSS3和GSS1几乎一毛一样,所以我就把GSS1的题解稍微改了一下就好了。 首先说明一下这道题的重难点。这道题由于只有一个单点赋值的操作,并要求我们求区间最大子段和,这个东西显然很不好维护(单点赋值很好做)。要维护它,我们先要看一下在查询和建树过程中 可能遇到的情况。 一、该区 阅读全文
posted @ 2020-07-28 09:51 Shadow_hyc 阅读(92) 评论(0) 推荐(0)
摘要: ###思路 首先说明一下这道题的重难点。这道题由于没有更新操作,所以我们就省去了update和维护lazytag的麻烦,但是不要高兴的太早。这道题要求我们求区间最大子段和,这个东西显然很不好维护。 要维护它,我们先要看一下在查询和建树过程中可能遇到的情况。 一、该区间的最大子段和完全被包括在它的左儿 阅读全文
posted @ 2020-07-28 09:40 Shadow_hyc 阅读(77) 评论(0) 推荐(0)
摘要: ###思路 一、30pts做法 这种做法简直简单到爆炸,$k==0$的情况只要跑最短路即可。 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queu 阅读全文
posted @ 2020-07-28 09:30 Shadow_hyc 阅读(166) 评论(0) 推荐(0)
摘要: ###思路 这个题一看和入度扯上关系就是明显的topo了。 对于最优情况,直接维护小根堆,贪心即可。 对于最劣情况,显然直接维护大根堆然后贪心是错误的(反例见Luogu题解),所以每次要取出所有能拓展的节点,依次加入队列topo即可。这里注意当连到的点比当前最大值大时,压入大根堆, 否则加入队列。 阅读全文
posted @ 2020-07-28 08:50 Shadow_hyc 阅读(114) 评论(0) 推荐(0)
摘要: ###思路 对于这道题,为了好想,我们先考虑一下如果不考虑历史最大值应该怎么做。这样的话,我们需要做区间加和区间推平的操作。那么,做过线段树2的都知道,我们应该是需要两个tag来维护,分别是区 间累加和区间推平。那么对于这个题,我们怎么在pushdown的时候兼容这两个tag呢? 很显然,无论你先做 阅读全文
posted @ 2020-07-28 08:40 Shadow_hyc 阅读(165) 评论(0) 推荐(1)
摘要: ###思路 这个题一看到什么从入度为零的点到出度为零的点,很容易想到toposort。这个题就是最基本的toposort+DAG DP,没啥好说的…… 主要注意一定是遇到出度为0的点,一条食物链才能算是结束,才能够累加答案。 Code #include<iostream> #include<cstd 阅读全文
posted @ 2020-07-28 08:29 Shadow_hyc 阅读(114) 评论(0) 推荐(0)
摘要: ###思路 对于这道题,我们从题目里可以知道,蓝色代表的方块为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)