自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 P3193 [HNOI2008]GT考试

先考虑朴素的 dp。由于涉及到匹配问题,只有一个串,考虑 kmp。

2023-01-20 18:15:19 160

原创 题解 P2480 [SDOI2010]古代猪文

题解 P2480 [SDOI2010]古代猪文

2023-01-18 23:44:19 114

原创 浅谈网络流

浅谈网络流。持续更新中。

2022-08-10 14:49:39 156

原创 loj 数列分块入门 1 ~ 9 做题笔记

前言做了 hzwer 的分块系列(%%% hzwer 学长loj6277 数列分块入门 1给定数列,区间修改,单点查询。区间修改可以打永久标记。没什么好说的,毕竟是 1。#include <bits/stdc++.h>#define int long longusing namespace std;inline int read(){ int x=0,f=0;char ch=getchar(); while(!isdigit(ch))f^=!(ch^45)

2022-04-25 21:39:41 887

原创 SP12005 GRASSPLA - Grass Planting 题解

题目传送门更好的阅读体验Solution I这几乎是一道树链剖分模板题,和模板题唯一的区别在于这题维护的是边权。因为除了根以外的节点都有父亲,但是叶子数量很多,所以我们让深度大的节点存储边的信息,就方便处理很多了。在操作的时候,因为深度大的节点存储的才是边的信息,所以最顶端的节点是不能计算的。如图,若操作 [2,5][2,5][2,5],那么操作到最后(处于同一条重链上),就得操作顶端节点的重儿子。#include <bits/stdc++.h>#define endl '\n

2022-04-20 20:20:51 980

原创 CF1579F Array Stabilization (AND version) 题解

题目传送门更好的阅读体验分析根据 &\&& 操作的性质,只要有一个 000 存在,这个数记作 aia_iai​,那么 ai+da_{i+d}ai+d​ 就可以变成 000,然后 ai+da_{i+d}ai+d​ 又可以继续更新下一个数为 000,所以直接 bfs 解决即可。最终的答案即为 bfs 的次数。注意,由于无论如何都会入队一次,最终答案需要减一。代码实现#include <bits/stdc++.h>using namespace std;inl

2022-02-27 21:54:42 442

原创 P4588 [TJOI2018]数学计算 题解

题目传送门题意简述xxx 初值为 111,要求支持以下操作:操作 1:将 x←x⋅mx\leftarrow x\cdot mx←x⋅m,输出 xmod  Mx \mod MxmodM;操作 2:将 x←x÷kx\leftarrow x \div kx←x÷k,kkk 是第 mmm 次操作时乘上的数,输出 xmod  Mx\mod MxmodM。分析线段树好题!线段树好题!线段树好题!做过这道题后,我真的对线段树有了更加深厚的了解。看到这个题目其实很难想象可以使用线段树来做,但我们可以发现,如

2022-02-20 20:02:53 350

原创 P1353 [USACO08JAN]Running S 题解

题目传送门分析状态定义可以看出,这是一道 dp 题,我们定义二维状态 dpi,jdp_{i,j}dpi,j​ 表示第 iii 分钟疲劳值为 jjj 时能跑的最大距离。状态转移显然,第 iii 分钟可以选择跑或休息。跑跑步的情况下就要花费 111 时间和 111 疲劳值,即 dpi−1.j−1dp_{i-1.j-1}dpi−1.j−1​。休息若疲劳值 j=0j=0j=0,仍然可以花费 111 分钟休息。若 j≠0j\neq 0j​=0,就要在第 i−ji-ji−j 分钟疲劳值为

2022-02-17 21:56:38 302

原创 RMQ | ST 表 | 树状数组 学习笔记

前言前段时间没啥空写博客,今天汇总一下这几天学的几种数据结构。Part1. ST 表ST 表是用于求解 RMQ(区间最值) 问题的一种数据结构,使用了倍增的思想,时间复杂度 O(nlog⁡n)\mathcal{O}(n\log n)O(nlogn)。本人认为 ST 表很类似区间 dp。有一个数组 aaa,假设现在要求静态区间最大值。I. 创建 ST 表首先定义 ST 表 sti,jst_{i,j}sti,j​ 表示 [i,i+2j−1][i,i+2^j-1][i,i+2j−1] 这段区间的最大

2022-02-16 21:20:23 284

原创 P2107 小Z的AK计划 题解

题目传送门更好的阅读体验分析考虑一个贪心,由于 xix_ixi​ 呈线性排列,我们一定要保证去到的机房越多越好,所以将 xxx 排序,每次前往最近的机房,如果可以 AK 则 AK,累加答案。代码实现我相信我的解法一定有漏洞,欢迎各位 dalao 来 hack。#include <bits/stdc++.h>#define int long longusing namespace std;inline int read(){ int x=0,f=0;char ch=get

2022-02-16 19:24:24 441

原创 P8152 「PMOI-5」破译の论 题解

题目传送门分析第一次划分会变成 n2n^2n2 块,之后每次划分都会增加 n2−1n^2-1n2−1 块(减一是因为自己那一块不能重复算),所以答案就是 k⋅(n2−1)+1k\cdot (n^2-1)+1k⋅(n2−1)+1。需要注意一下取模。代码实现#include <bits/stdc++.h>using namespace std;long long n,k;long long ans;int main(){ cin>>n>>k; cout

2022-02-15 19:07:14 382

原创 CF1637A Sorting Parts 题解

题目传送门题意简述给你一个长度为 nnn 的数组 aaa,你可以选择 1∼n−11\sim n-11∼n−1 的一个数 lenlenlen,分别对 [1,len][1,len][1,len] 和 [len+1,n][len+1,n][len+1,n] 排序,如果存在一个 lenlenlen 能使数组非升序输出 YES,否则输出 NO。分析这题我的考场代码被 hack 了,暴力枚举会 TLE。我们分类讨论数组 aaa:1. aaa 有序当 aaa 有序时,无论选择哪个 lenlenlen,都不可

2022-02-15 19:06:49 247

原创 CF399B Red and Blue Balls 题解

题目传送门或许更好的阅读体验分析本题暴力解法会 TLE,所以我们需要进一步分析。定义状态 aia_iai​ 表示把前 iii 个球全部变为红色的步数,那么如果第 iii 个球是蓝色的话,我们需要做如下操作:把前 i−1i-1i−1 个球弹出;把第 iii 个球变成红色;把第 iii 个球前面填上蓝色球。显然,既然取到了第 iii 个球,那这个球前面的一定都是红球,需要 ai−1a_{i-1}ai−1​ 次转换,那么转移方程如下:ai={1,i=1,∑j=1i−1aj+1,i

2022-02-15 19:06:09 333

原创 CF1631A Min Max Swap 题解

题目传送门题意简述给定数组 aaa 和 bbb,可以交换下标相同的两个元素。让 aaa 数组的最大值和 bbb 数组的最大值之积最小。分析想象一个长方形,它的周长是固定的,那怎么分配长和宽才能让面积尽可能的小呢?就假设周长是 181818,则长宽之和是 999,列下表格:长宽面积188271436184520观察长和宽的差值,分别是 7,5,3,17,5,3,17,5,3,1,而面积不断地增大。所以我们可以得出结论:两个数和一定,

2022-02-09 19:00:09 680

原创 P3831 [SHOI2012]回家的路 题解

题目传送门分析解法 1:每两个点都连边,跑裸的最短路。显然,nnn 和 mmm 非常大,暴力连边会 TLE 和 MLE。解法 2(正解):首先,对答案产生贡献的只有换乘站,所以我们只用连两种边:一个换乘站看作 222 个节点,连边,边权为 111(站内换乘)。将 xxx 相等的换乘站相连,yyy 相等的换乘站相连。其中,起点和终点也要加入图中。建完图后,因为起点有两个,一个是 000,一个是 m+1m+1m+1,以这两个为源点跑最短路,再取个最小值即可。代码#include

2022-01-26 00:19:30 299

原创 P1197 [JSOI2008]星球大战 题解

题目传送门题意简述给定一张无向图,每次删去一个节点,问每次操作后的连通块个数。分析m≤2×105,n≤2⋅mm\le2\times10^5,n\le2\cdot mm≤2×105,n≤2⋅m,如果每次暴力删点再 bfs,必定超时。还记得上次提到的 [USACO16OPEN]Closing the Farm 吗?这两题非常非常相似,我们可以将删点转换为加点,倒序处理,再求连通块即可。算法步骤如下:建图,读入每次删去的节点。先预处理出起始图(即把幸免遇难的节点做并查集),统计连通块数。倒序处

2022-01-24 23:56:48 166

原创 P1525 [NOIP2010 提高组] 关押罪犯 题解 | 种类并查集

前言并查集,想必大家并不陌生,她可以方便快捷地合并、查询两个集合。例题:P1551 亲戚。不过我们今天的重点不是普通并查集太简单了(雾,而是并查集的一种变体,种类并查集。Part1. 种类并查集种类并查集一般是把元素分成确定的集合数。例如 P1525 [NOIP2010 提高组] 关押罪犯,把若干个罪犯分成 222 个集合,而且给关系很特别,给的是 222 个数不在一个集合。此时,种类并查集就派上用场了。Part2. 实现先看代码:#include <bits/stdc++.h&gt

2022-01-24 19:05:25 655

原创 法力水晶(diamond.*)题解

分析这道题我们可以使用栈来模拟,当栈顶元素和当前输入的元素和是奇数就 stk.pop(),否则就 stk.push()。代码如下#include <bits/stdc++.h>using namespace std;#define int long longinline int read(){ int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdig

2022-01-23 13:39:02 223

原创 P1137 旅行计划 题解

题目传送门题意简述给定一张有向图,起点任意,求出到每个点经过的最多点数和。分析先把图画出来:一开始做这题的时候以为是非常简单的最短(长)路,但是发现起点是任意的,没有源点,所以我们就不能用 SPFA 啦反正都死了(事实上,我们可以对这张图进行拓扑排序,将入度为 000 的节点 disdisdis 设为 111,这样就能保证每次更新的 disdisdis 都是最优的。代码实现#include <bits/stdc++.h>using namespace std;struct

2022-01-22 15:55:52 308

原创 P1396 营救 题解

题目传送门分析这题有好几种方法可以做,有跑最短路的,有些最小生成树的。这里介绍最短路的方法。单源最短路径,很自然地想到 Dijkstra。不过题目要求的是最大值最小,所以松弛就要改成:if(dis[v]>max(dis[u],e[i].w)) dis[v]=max(dis[u],e[i].w);代码实现#include <bits/stdc++.h>using namespace std;int n,m,s,t;struct edge{ int to,nxt,w;

2022-01-21 21:54:27 243

原创 「面向 oier」最简洁 vscode 配置 c++ 运行环境

前言看了网上的不下 50+50^+50+ 篇配置指北,感觉都很复杂,不够简介。后来终于用了最简洁的方式配置好了 vscode,不到 222 分钟。Part1. 安装 .NET Framework一般来说 Windows 系统自带 .NET Framework,但如果你的电脑没有,就去下载一个,这个耗时挺久的,不过很少需要这步。很神奇的是,我们机房就刚好没有,下载一个要 10 多分钟(Part2. 配置 MinGW 环境变量作为一名 oier,电脑上一定有 Dev C++/Code::Blocks

2022-01-21 20:14:22 475

原创 P1196 [NOI2002] 银河英雄传说 题解

题目传送门分析可以看到,题目中涉及到很多合并和查询操作,所以我们可以用并查集来维护每列的信息。不过这题需要而外维护两个数组 disidis_idisi​ 和 sizisiz_isizi​,分别表示距离序列头部的距离和以 iii 做头的序列长度。合并时需要更新 sizsizsiz 和 disdisdis。查询 iii 和 jjj 之间的飞船个数就是 ∣disi−disj∣−1|dis_i-dis_j|-1∣disi​−disj​∣−1。代码#include <bits/stdc++.h&g

2022-01-21 19:51:20 265

原创 「THOI」THOI Round1 赛后题解

A. 出题题目传送门该题正解 dp,数据略水,暴力都过了。完全背包问题,只不过要求刚好装满,所以 fff 数组可以全部赋值为一个特殊的数,只有刚好装到这个容量时才能转移。代码实现:#include <bits/stdc++.h>using namespace std;int f[4005];int n,s[4];int main(){ cin>>n>>s[1]>>s[2]>>s[3]; fill(f+1,f+n+1,INT_

2022-01-20 19:20:41 255

原创 强连通分量 Tarjan 算法 学习笔记

Part1. 强连通分量强连通我们知道,在无向图中,如果点 uuu 和点 vvv 直接或间接可以相互到达对方,就说点 uuu,vvv 连通。#mermaid-svg-zsspkck5SSk03GUE .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-zsspkck5SSk03GUE .label text{f

2022-01-18 16:34:59 272

原创 P1775 石子合并(弱化版) 题解

题目传送门分析此题做法有好几种,其中一种是 dp,还有一种是记忆化搜索。我们知道暴力 dfs 非常慢,但是加上记忆化优化后会原地起飞。dfs(l,r)表示合并区间 [l,r][l,r][l,r] 的最小价值,那么我们枚举 [l,r][l,r][l,r] 间的一个中转点 iii,答案就是:不合并;合并,加上代价;取最小值。dfs(l,r)=min(dfs(l,i)+dfs(i+1,r)+a[r]-a[l-1]);aaa 数组存的是前缀和,快速求合并 [l,r][l,r][l,r] 的代价

2022-01-18 15:12:21 402

原创 Sublime Text 3 配置 C++ 运行环境

Part1. 配置环境变量要想运行 C++ 程序,首先需要编译器,这里使用 MinGW。可以去官网下载,不过若你安装了 Dev C++ 或 Code::Blocks,什么都不用做。找到 MinGW 路径下的 bin 文件夹,复制路径,再打开系统高级设置,点击环境变量,点击系统变量,把路径添加进去。#mermaid-svg-PQgHjmTmJuSnv51b .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermai

2022-01-18 00:58:11 987 1

原创 最小生成树 学习笔记

前言最小生成树是最小权重生成树的简称。通俗来讲就是,一个有 nnn 个点的无向连通图,选出其中 n−1n-1n−1 条边使图联通,每条边都有权值,要求权值和最小。更详细的解释可参考 OI Wiki。Kruskal 算法Part1. 前置芝士并查集Part2. 思想Kruskal 算法(应该是)最好理解也最好写的最小生成树算法,核心思想是贪心。算法步骤如下:读入 mmm 条边,按边权排序。重复执行 mmm 次,每次取出最小边。判断是否在生成树内,若不在,合并集合,更新代价。有人就

2022-01-18 00:20:14 522

原创 [USACO16OPEN]Closing the Farm 题解

本题有两道一模一样的题目,改个数据范围即可 AC。题目1 | 题目2题意简述给定一张无向图,每次删去一个点,问每次操作后图是否联通。分析判断图是否联通可以想到使用并查集来维护。但是并查集很难实现删除操作,那如何处理呢?并查集的核心是“并”和“查”,既然题目要求每次删去一个点,那不如反过来想,倒序处理,把删点变成加点,这样处理起来就非常方便快捷了。代码实现#include <bits/stdc++.h>using namespace std;int n,m;struct e

2022-01-17 17:21:58 244

原创 TYOI2021 游记

文章同步发表于 https://www.cnblogs.com/tmjyh09/p/15740172.htmlBefore the contest无。很颓废。Tips比赛本来是 222 天的,结果 111 天考完。下面当成两天。食堂的饭很香,但不够。累。Day -1 2021.12.24打了场模拟赛,极差,总分才 110pts110pts110pts,T1 巨水可我没做。听天由命吧。Day 1 2021.12.25Preface圣诞快乐。一打开你谷就本来就悬,

2022-01-15 13:25:13 386

原创 SP18966 VACATION - Vacation Planning 题解

题目传送门题意简述给定一张有向带权图,有 QQQ 个请求,每个请求给出点 aia_iai​,bib_ibi​,费用为 aia_iai​ 经过点 1→K1 \rightarrow K1→K 中的至少一个到达 bib_ibi​ 的最小权值和。求出可行的请求数和最小费用和。分析有多个询问,很明显是多源最短路,求多源最短路可以用 Floyd,也可以调用 nnn 次 Dijkstra。核心代码int dis[205][205];bool vis[205][205];void Dijkstra(int

2022-01-15 13:24:14 113

原创 最短路 学习笔记

前言最短路是图论中的一个比较重要的部分,许多问题都可以抽象为最短路来解决,常见的求最短路径算法有3种,Floyd,Dijkstra 和 SPFA(Bellman-Ford 的队列优化),下面我们逐一介绍。1. Dijkstra 算法Dijkstra 算法一般用于求图的单源最短路,本质上是一个贪心的思想。朴素 Dijkstra 时间复杂度为 O(V2)O(V^2)O(V2) ,堆优化后时间复杂度为 O(Vlog⁡2E)O(V\log_2E)O(Vlog2​E) 。代码实现如下:int Dijkst

2022-01-15 12:29:21 179

msnet.zip

msnet.zip

2022-02-11

空空如也

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

TA关注的人

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