洛谷
文章平均质量分 80
洛谷比赛刷题题解
ZCETHAN
少年的悲哀,毕竟是易消的残雪
展开
-
CF1416D Graph and Queries
传送门题目大意给一张图,有两种操作。查询与一个点 vvv 联通的点中权值的最大值。输出后最大值赋为 000。删去一条边。Solution感觉题解区用倒着加边做的人比较多,我这里给出一种比较正向的做法。首先我摊牌了,我是为了练习克鲁斯卡尔重构树而做的,因此我拿到题我就往着上面想了。还是一样的套路,考虑边的优劣性。由于我们希望图尽可能联通,所以在重构树的时候,要选择一条最晚被断开的路径才不会影响正确性。于是我们考虑这个只删不增的特性,先离线所有询问,这样我们就可以得到每一条边在图中存在的最晚原创 2021-09-12 19:38:18 · 70 阅读 · 0 评论 -
P7834 [ONTAK2010] Peaks 加强版
传送门题目大意感觉题目描述已经足够清楚了。Solution这道题需要的东西有点多,我们不妨先来分解一下题目的需求。经过权值 ≤x\le x≤x 的边所能到达的点。马上想到最小生成树,很明显了,和货车运输一样。不赘述了。所有点中权值第 kkk 大。好的,又是裸的静态区间第 kkk 大。由于是强制在线,所以一发主席树就结束了。好接下来我们把这两个玩意儿结合一下,哦,然后我们掏出一个克鲁斯卡尔重构树就做完了。我是 fyy,我一眼秒了,感觉这题没啥技巧啊。好的我具体讲一下。我们对于原创 2021-09-12 15:37:39 · 455 阅读 · 0 评论 -
[NOI2018] 归程
传送门题目大意给定一张无向图,每条边有一个海拔 aaa,每次询问一个 vvv 和 ppp 表示起点和水位。可以从起点开始先花费 000 到达任意点,条件是不经过 a≤pa\le pa≤p 的边。如果必须要经过这样的边,那么在进入这条边的端点开始,经过每条边的花费就是其长度。求 v→1v\to 1v→1 的最小花费是多少。Solution题意非常神必,还强制在线。不过有一个很直观的想法就是做最大生成树。现在我介绍一下最大生成树的思路:首先跑最大生成树,然后以每次询问可以分成两种情况:水位没有超原创 2021-09-08 12:02:48 · 166 阅读 · 0 评论 -
[COCI2017-2018#5] Pictionary
传送门题目大意给定 nnn 个点,第 iii 次会把所有编号满足 gcd(a,b)=m−i+1\gcd(a,b)=m-i+1gcd(a,b)=m−i+1 的点对连边,对于每个询问 a,ba,ba,b,求点 aaa 和点 bbb 什么时候联通。Solution场上没做出来,还是逊了。脑洞不够,套路不够。其实想通了还是蛮简单的。首先我们考虑把连边转化一下。如果 gcd(a,b)=k\gcd(a,b)=kgcd(a,b)=k,那么显然 aaa 和 bbb 都是 kkk 的倍数。而每一次把 gcd原创 2021-09-06 14:26:31 · 128 阅读 · 0 评论 -
[CEOI2015 Day2]世界冰球锦标赛
传送门题目大意给定 nnn 个正整数,从中选出若干个数,使得和不超过 mmm,问有多少种合法的方案。Solution乍一眼看一脸不可做,但是看到数据范围就豁然开朗了。N≤40N\le40N≤40很显然是爆搜。Yes,brute force yyds.好吧很快发现爆搜会炸,复杂度是 O(2n)O(2^n)O(2n),是过不了的。然后我们一拍脑瓜,掏出一个折半搜索,然后就做完了。先考虑爆搜前一半,复杂度是 O(220)O(2^{20})O(220),非常可以。然后总共最多也就 2202^原创 2021-09-06 14:07:47 · 123 阅读 · 0 评论 -
[BJOI2019]光线
传送门题目大意有 nnn 层玻璃,每一层都有 a%a\%a% 的透光率和 b%b\%b% 的反光率(剩下的会被吸收),现有 111 单位光打向第一层玻璃,求有多少单位的光透过所有玻璃,对 109+710^9+7109+7 取模。Solution不要 nt 了,这题模拟会吐的。看样例的图就知道了。那很自然会想到线性递推。首先很容易想到设 dpidp_idpi 表示 111 单位光线透过前 iii 层玻璃后的光线数。则:dpi=dpi−1×ai+sth.dp_i=dp_{i-1}\times a_原创 2021-09-05 20:57:44 · 101 阅读 · 0 评论 -
帕秋莉的手环
传送门题目大意给定一个长度 nnn,求有多少个长度为 nnn 的 010101 环,使得没有两个相邻的 000。不得不说 Luogu 上的翻译是真的差劲。Solution看完题面就知道是裸的 dpdpdp 题,有点 dpdpdp 基础的人很快就能写出 dpdpdp 的转移式子。设 dpi,0/1dp_{i,0/1}dpi,0/1 表示第 iii 位填入 0/10/10/1 的方案数是多少。则有:如果当前这位是 000,则前一位必须是 111。即:dpi,0=dpi−1,1dp_{i,0}=原创 2021-04-22 09:06:29 · 178 阅读 · 0 评论 -
AT2163 [AGC006B] Median Pyramid Easy
AT2163题目大意给定这样一个 nnn 层的方格金字塔:然后最后一行是 1∼n×2−11\sim n\times 2-11∼n×2−1 的排列,之后每一格都是正下方、左下方、右下方 333 个格子中的数的中位数。然后给定第一层的数 xxx,要求你构造一个合法的最后一层。Solution显然不可能枚举然后验证,那么这显然是一道构造题(阿巴阿巴)首先观察它构造的规律。如果三个数中,有 222 个是相等的,那么这三个数“合成”的数也一定是与那两个数相等。所以在任意位置,一旦有 222 个相邻的并原创 2021-04-01 11:26:03 · 196 阅读 · 0 评论 -
CF891C Envy
CF891C Envy题目大意给出一个nnn个点mmm条边的无向图,每条边有边权,共QQQ次询问,每次给出kik_iki条边,问这些边能否同时在一棵最小生成树上。Solution首先明确两件事:连通图中所有最小生成树中,所有权值的边的数量都是相等的。各权值的边之间是无影响的。分别说明:对于第一点,显然,由于用KruskalKruskalKruskal求出来的结果一定是最优的,如果某一权值的边少了,势必会多出一条权值更大的边,如果多了,那么势必会导致后面的边会无法加入,最终导致答案更劣原创 2021-03-17 08:45:27 · 134 阅读 · 0 评论 -
[ZJOI2012]灾难
题目大意给定一张食物网,对于每一种生物,求其灾难值。灾难值的定义为如果它突然灭绝,那么会跟着一起灭绝的生物的种数。Solution很多dalaodalaodalao说是支配树。呃?不知道支配树??没事,我也不知道,但是这题看完之后自然就知道了。如果给你的不是一个DAGDAGDAG,而是一棵树,那么怎么做?这不简单?每个节点的答案就是子树大小−1-1−1,因为要减去自己。那我们就把图变成一棵树。我们以样例为例。首先草是一切生物的食物来源,所以其等级最高,就会被建在我们新建的树的根原创 2021-03-13 13:04:18 · 172 阅读 · 0 评论 -
[SHOI2005]树的双中心
题目大意给定一棵无根树,函数S(x,y)=∑v∈V(W(v)∗min(d(x,v),d(y,v)))S(x,y)=\sum\limits_{v\in V}(W(v)*min(d(x,v),d(y,v)))S(x,y)=v∈V∑(W(v)∗min(d(x,v),d(y,v))),其中VVV是点集,W(v)W(v)W(v)是vvv点的权值,d(x,y)d(x,y)d(x,y)表示树上两点之间的距离。求当xxx和yyy取多少时,S(x,y)S(x,y)S(x,y)能取到最小值,并输出这个最小值。Solut原创 2021-03-10 09:26:38 · 155 阅读 · 0 评论 -
AT2005(单调栈,差分)
传送门SolutionStep 1Step\,1Step1分析整个操作过程是什么特点。如果之后有一个长度比之前最短的还要短,那么后面的统统截掉,相当于白给,所以,任何降序的操作都是无意义的。所以先利用单调栈处理出一个严格单调上升的序列(注意nnn也要放进去,因为nnn是初始长度)。Step 2Step\,2Step2面对一个单调上升的序列,需要一个方法来处理答案。考虑从长度为a→ba\to ba→b,则必定是长度为aaa时的若干个循环加上一个aaa的前缀构成长度为bbb。而这样的两个原创 2021-01-17 20:00:41 · 126 阅读 · 0 评论 -
洛谷P7263 Something Comforting
传送门分析通俗粗糙的理解通俗粗糙的理解通俗粗糙的理解这是我比赛时的思路,由于题目中给出的是一个合法的序列,则一定可以分成若干个子括号序列。具体地,如(())()(()())(())()(()())(())()(()()),可以分成(()) () (()())(())\;()\;(()())(())()(()()),则对于每一个子序列,可以将它反过来,也可以不反,就构成了不合法的序列(当然,如果都不反也是一种,此时是合法的),所以只要求出这样的子序列的个数xxx,则通过题目中给出的方式得到给定原创 2021-01-10 20:31:16 · 119 阅读 · 1 评论 -
Kruskal重构树(AT1998 Stamp Rally)
引入大家都知道KruskalKruskalKruskal求最小生成树吧,这个算法就是建立在前面说的算法的基础上的一个奇妙的想法。有这么一个问题,给你一张图,每条边都有权值,然后规定一堆东西后问:满足条件的路径中,所经过边权最大值最小是多少。初步想法二分,一定是最先想到的,我们接下来就以标题中的那题为例讲讲这个算法。我们很容易想到二分最大边权,然后验证。但是每次验证都跑dfsdfsdfs肯定得炸。那么怎么办呢。来看看重构树算法的实现吧。实现首先,根据KruskalKruskalKruskal原创 2021-01-03 16:09:53 · 99 阅读 · 0 评论 -
ST表-RMQ问题(洛谷P3865)
前置芝士用倍增思想求静态区间最值(无法求和)。dp[i][k]dp[i][k]dp[i][k]表示区间[i,i+2k−1][i,i+2^k-1][i,i+2k−1]的最大或最小值。预处理O(nlogn)O(n\log n)O(nlogn)则dp[i][0]=a[i]dp[i][0]=a[i]dp[i][0]=a[i]。则:dp[i][j]=min/max(dp[i][j−1],dp[i+2j−1][j−1])dp[i][j]=min/max(dp[i][j-1],dp[i+2^{j-1}][j原创 2020-11-05 20:07:49 · 127 阅读 · 0 评论 -
洛谷君のNOIP。のCSP信心赛B题题解(动规,思维,次大)
T2题目大意给定一个矩阵(n∗mn*mn∗m),则你可以求从左上走到右下路径上的权值累加和的最大值(要求只能向右或下走)。此时你可以将其中的任意一个元素改成0,求改动哪一个元素,可以使最大值最小。并输出这个最小的最大值。题解这题的难点就是在你可以将一个格子变成0,那么不妨我们来思考如何求不变成0的最大值。那就是一道方格取数的问题,dpdpdp的入门题。设dp[i][j]dp[i][j]dp[i][j]表示从(1,1)→(i,j)(1,1)\to(i,j)(1,1)→(i,j)的路径权值的最大值,原创 2020-10-05 21:27:47 · 203 阅读 · 0 评论 -
洛谷君のNOIP。のCSP信心赛A题题解(记忆化搜索,分治)
T1题目大意给定一个nnn和kkk,然后求按照一定的要求,在nnn个座位的圆桌上最多坐的人的数量。要求:1、第一个人选择一号位 \qquad\,\, 2、接下来每个人会坐在离最近的人尽可能远的位置 \qquad\,\, 3、每个人离最近的人之间的空位子数量不得小于kkk题解对于10%10\%10%由于k=0k=0k=0,可以直接输出nnn。不知道各位的想法如何,我十分敏感地想到了毕导的这个视频,当场就喊出来了。这实在是太像了。于是我就顺着毕导的思路做这道题:答案是在kkk确定的前提原创 2020-10-04 23:16:25 · 102 阅读 · 0 评论