摘要: 前言 前段时间没啥空写博客,今天汇总一下这几天学的几种数据结构。 Part1. ST 表 ST 表是用于求解 RMQ(区间最值) 问题的一种数据结构,使用了倍增的思想,时间复杂度 \(\mathcal{O}(n\log n)\)。 本人认为 ST 表很类似区间 dp。 有一个数组 \(a\),假设现 阅读全文
posted @ 2022-02-16 21:24 tmjyh09 阅读(65) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 分析 考虑一个贪心,由于 \(x_i\) 呈线性排列,我们一定要保证去到的机房越多越好,所以将 \(x\) 排序,每次前往最近的机房,如果可以 AK 则 AK,累加答案。 代码实现 我相信我的解法一定有漏洞,欢迎各位 dalao 来 hack。 #include <bits/stdc++ 阅读全文
posted @ 2022-02-16 19:25 tmjyh09 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 题意简述 给你一个长度为 \(n\) 的数组 \(a\),你可以选择 \(1\sim n-1\) 的一个数 \(len\),分别对 \([1,len]\) 和 \([len+1,n]\) 排序,如果存在一个 \(len\) 能使数组非升序输出 YES,否则输出 NO。 分析 这题我的考场 阅读全文
posted @ 2022-02-15 19:11 tmjyh09 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 分析 第一次划分会变成 \(n^2\) 块,之后每次划分都会增加 \(n^2-1\) 块(减一是因为自己那一块不能重复算),所以答案就是 \(k\cdot (n^2-1)+1\)。 需要注意一下取模。 代码实现 #include <bits/stdc++.h> using namespa 阅读全文
posted @ 2022-02-15 19:11 tmjyh09 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 分析 本题暴力解法会 TLE,所以我们需要进一步分析。 定义状态 \(a_i\) 表示把前 \(i\) 个球全部变为红色的步数,那么如果第 \(i\) 个球是蓝色的话,我们需要做如下操作: 把前 \(i-1\) 个球弹出; 把第 \(i\) 个球变成红色; 把第 \(i\) 个球前面填上 阅读全文
posted @ 2022-02-15 19:10 tmjyh09 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 题意简述 给定数组 \(a\) 和 \(b\),可以交换下标相同的两个元素。让 \(a\) 数组的最大值和 \(b\) 数组的最大值之积最小。 分析 想象一个长方形,它的周长是固定的,那怎么分配长和宽才能让面积尽可能的小呢? 就假设周长是 \(18\),则长宽之和是 \(9\),列下表格 阅读全文
posted @ 2022-02-09 23:16 tmjyh09 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 分析 解法 1: 每两个点都连边,跑裸的最短路。 显然,\(n\) 和 \(m\) 非常大,暴力连边会 TLE 和 MLE。 解法 2(正解): 首先,对答案产生贡献的只有换乘站,所以我们只用连两种边: 一个换乘站看作 \(2\) 个节点,连边,边权为 \(1\)(站内换乘)。 将 \( 阅读全文
posted @ 2022-01-26 00:21 tmjyh09 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 题意简述 给定一张无向图,每次删去一个节点,问每次操作后的连通块个数。 分析 \(m\le2\times10^5,n\le2\cdot m\),如果每次暴力删点再 bfs,必定超时。 还记得上次提到的 [USACO16OPEN]Closing the Farm 吗?这两题非常非常相似,我 阅读全文
posted @ 2022-01-24 23:58 tmjyh09 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 题意简述 给定一张有向图,起点任意,求出到每个点经过的最多点数和。 分析 先把图画出来: 一开始做这题的时候以为是非常简单的最短(长)路,但是发现起点是任意的,没有源点,所以我们就不能用 SPFA 啦反正都死了( 事实上,我们可以对这张图进行拓扑排序,将入度为 \(0\) 的节点 \(d 阅读全文
posted @ 2022-01-22 15:57 tmjyh09 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 题目传送门 分析 这题有好几种方法可以做,有跑最短路的,有些最小生成树的。这里介绍最短路的方法。 单源最短路径,很自然地想到 Dijkstra。不过题目要求的是最大值最小,所以松弛就要改成: if(dis[v]>max(dis[u],e[i].w)) dis[v]=max(dis[u],e[i].w 阅读全文
posted @ 2022-01-21 22:00 tmjyh09 阅读(38) 评论(0) 推荐(0) 编辑