- 博客(27)
- 收藏
- 关注
原创 [20220217][树形DP][基环树]创世纪
【树】【树形DP】创世纪时间限制 : 1.000 sec 内存限制 : 128 MB题目描述上帝手中有 N 种世界元素,每种元素可以限制另外1种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i]。现在,上帝要把它们中的一部分投放到一个新的空间中去建造世界。为了世界的和平与安宁,上帝希望所有被投放的世界元素都有至少一个没有被投放的世界元素限制它。上帝希望知道,在此前提下,他最多可以投放多少种世界元素?输入第一行是一个整数N,表示世界元素的数目。第二行有 N 个整数A[1], A
2022-02-17 15:17:45
270
1
原创 [20220107][线段树合并 LCA 树上差分][BZOJ3307]雨天的尾巴
注意到这个性质符合区间加,所以可以用线段树维护每个点的信息(但还是觉得很奇怪,因为这题其实只有修改,查询可以认为没有,那么用线段树总觉得有点浪费,所以其实有一种更优秀的解法就是利用树链剖分将树上问题转化为序列进行差分)显然不能每个点都开满线段树,那样就直接n2的空间复杂度了,需要利用动态开店优化空间,由于每次修改就会更新一条链,树高是logn所以是nlogn的空间复杂度,当然别忘了乘4。线段树虽然能维护每个点的信息,但是最后查询的时候需要的话求树上的前缀和,也就是子树和,所以考虑线段树合并。
2022-01-07 15:39:46
236
原创 20220105[分块][BZOJ3343]教主的魔法
题目描述教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单独增加第L(R)个英雄的身高)CYZ、光哥和ZJQ等人不信教主的邪,于是他们有时候会问WD闭区间 [L, R] 内有多少英雄身高大于等于C,
2022-01-05 19:19:42
111
原创 20220104[动态规划 图论 建模][衢州市赛2017]环游衢州
20220104[动态规划 图论 建模][衢州市赛2017]环游衢州题目描述Jason 想要带着他新叫的朋友环游 QZ,于是他把 QZ 划分成了 n 个地方,已知这 n 个地方由 m 条双向边相连接,并且他把 n 个地方分别赋予了一个 happy 值,他希望按照 happy 值严格递减的方法去游览QZ,这样他可以把一些最美的地方介绍给他朋友。然而 Jason 的心态不太好,所以他有 k 次从小向大走的机会,问他最多能够带他的朋友游览几个地方,如果能够游览的地方数超过10^9+7则输出“infinity”
2022-01-04 16:37:06
303
原创 20211229[按秩合并并查集 最小生成树][BZOJ4668]冷战
20211229[BZOJ4668]冷战题意:给定N点,动态加边与询问两点最早是哪条边开始连通,强制在线首先如果离线的话可以直接跑最小生成树,不过代码不好处理。当然可以选择二分+并查集判连通,不过只有60分正解是不进行压缩路径的并查集进行合并,并且将加入时间作为边权,查询的话可以暴力跑两个点之间的最大边权即可。但是在做的时候还是想过有没有合适的数据结构可以预维护并查集内的点集还有两点间的关系,因为这样的话查询说不定可以避免O(n),想过vector,但是50W的数据显然不能用二维数组存储连通关系,
2021-12-29 20:54:43
183
1
原创 20211229[带权并查集][RQNOJ36]数石子
20211229[RQNOJ36]数石子只需用并查集将合并首尾相接的区间连接即可,所以左端点L要-1,才能自动衔接。一开始想当然以为最小的区间就是根,结果栽了跟头其实根不一定是最小的,但是要保证每次右端点所在的树根连向左端点,注意是左端点,不是左端点的树根,这样一来,路径上会出现负权边,但是在合并权值时,负数会被抵消,就像是区间先越过根节点所在点,然后又往回跑,将负数那一段抵消了。应该说还是没有完全理清楚,是一道非常好的带权并查集#include<cstdio>#define max
2021-12-29 11:33:19
96
原创 20211228 [搜索 栈 版本树][P1383]高级打字机
20211228 [P1383]高级打字机考虑每次操作都按顺序建立一个版本,撤销也算则撤销x步其实就是回退x步借此可以建立一条边,由回退的位置直接指向当前位置于是成了一棵树,在树上的每一条链上都不会有撤销相当于把所有的撤销操作处理成了非线性的树形结构于是可以一边搜索一边用栈去模拟在输入时要记录一下哪些点上有询问,输出时按照顺序输出,所以要记录询问的时间注意某些点上可能有多个点#include<cstdio>#include<vector>#include<
2021-12-28 10:38:27
119
原创 2021-10-03权值线段树(二)
入门篇权值线段树(一)关于权值线段树又看了一些题目,更加确信这个东西只是在建模方面进行了思维加深,由于其常与二维偏序问题结合才被单独赋予概念。本篇主讲两道题第K大值写一个线段树,维护可重集合中的第K大值思路是不难想的,每个区间的信息是当前区间内的数字个数CF1311F Moving Points题目大意:在一个一维坐标轴上给定nnn个点的初始坐标x1,x2,x3,x4……xnx1,x2,x3,x4……xnx1,x2,x3,x4……xn,每个点有一个初速度v1,v2,v3,v4……vnv1,v
2021-10-04 15:43:05
167
原创 2021.9.15 权值线段树
权值线段树例题最少逆序对其实这一题作为模板题不太好,还是有一点点其他的思维,不过无伤大雅概念权值线段树就是线段树(确信)至于和线段树有什么区别(没有区别)那为什么会有单独的一个名字呢?个人认为是有两个原因:①权值线段树在数据结构领域解决问题有着较为广泛的应用,尤其是涉及到值域问题时。②权值线段树的值域思维是一种新的思维,通常在数据结构题中出现,如果不是事先接触或者专门训练过可能难以自己领悟,所以作为一种新概念出现了综上所述,权值线段树就是线段树,但是在解决问题的建模时通常在值域上进行,
2021-09-15 21:48:41
282
3
原创 C++利用STL实现离散化
利用C++的STL实现离散化因为以前一直是手写实在太丑,所以总结了一下STL离散化的方法。大体分为:①将序列复制一份,并排序②利用unique去重③枚举原数组,利用lower_bound在排好序的数组中找位置④具体操作会涉及到STL迭代器的基本使用,详见STL的使用方法(其实就是一点地址使用的常识)#include<cstdio>#include<algorithm>#define maxn 10039using namespace std;int n, a[m
2021-09-15 20:18:34
830
原创 2021-08-29 三维积水问题 一时兴起的反思
因为出卷任务需要找些矩阵的题,想着挺久没刷题了上leetcode看到一道眼熟的题。给定一个三维矩阵,求最多能容纳的水量。这不是二维下的积水问题的三维版扩展么。一直被我当成一道质量很高的单调栈入门题,但是当我在思考三维情况该怎么推广时,却发现比我想得要难。十分钟无果,翻了题解瞬间傻逼。只要从边上一圈向中间贪心就行了,其核心是利用木桶效应,从边上一圈找最短的,计算相邻后得出部分答案,然后在相邻的柱子向内扩展,其巧妙之处是将算过的柱子看作已经填满水,即一边累计答案一边更新柱子的高度为最高能到的水位,以
2021-08-29 20:03:47
168
原创 【平衡树】旋转式Treap
怎么说,今天重温了平衡树的Treap写法,做了一点心得,稍微总结一下。首先是模板题:洛谷P6136 普通平衡树数据加强版平衡树的功能及个人理解首先,平衡树的退化版是二叉搜索数,二叉搜索树就不解释了。个人认为平衡树属于一类区间信息查找数据结构,搜索树主要是将带搜索信息存入树结构,借助树结构进行查找和维护,凡是这种支持区间或集合信息维护的数据结构往往能得到应用广泛。平衡树事实上只不过用了各种方法将树高维持在logN以内,保证查找效率而已,所以平衡树本身个人并不认为是一大类,例如Treap的核心是一种“
2021-01-27 21:35:09
453
原创 51nod 1105 第K大的数
1105 第K大的数1.0 秒 131,072.0 KB 20 分 3级题数组A和数组B,里面都有n个整数。数组C共有n^2个整数,分别是:A[0] * B[0],A[0] * B[1] … A[0] * B[n-1]A[1] * B[0],A[1] * B[1] … A[1] * B[n-1]…A[n - 1] * B[0],A[n - 1] * B[1] … A[n - 1] * B[n - 1]是数组A同数组B的组合,求数组C中第K大的数。例如:A:1 2 3,B:2 3 4。
2020-10-30 11:31:24
156
原创 【单调队列】Vijos1573 邮递机器人
原题链接:邮递机器人【题目分析】非常好的一道单调队列的题目,因为坑了我半个晚上。首先还是详细分析题面,需要注意一个关键点,就是必须连号,这样一来,就出现一个1到n的线性序列(不然除了状压实在想不到什么办法),所以我们可以整理出一个状态,那就是令F[i]F[i]F[i]表示将111到iii个邮包运送完毕,并回到起点所需的最短路程。注意为什么要加上"回到起点",因为题目要求最后回到起点,所以这样设置状态才是符合题意的。接下来是递推式,显然,一段连续的邮包可以单独计算,于是就有了子状态的表示:如上图所
2020-10-23 11:08:37
142
原创 【LeetCode】5454. 统计全 1 子矩形
给你一个只包含 0 和 1 的 rows * columns 矩阵 mat ,请你返回有多少个 子矩形 的元素全部都是 1 。示例 1:输入:mat = [[1,0,1],[1,1,0],[1,1,0]]输出:13解释:有 6 个 1x1 的矩形。有 2 个 1x2 的矩形。有 3 个 2x1 的矩形。有 1 个 2x2 的矩形。有 1 个 3x1 的矩形。矩形数目总共 = 6 + 2 + 3 + 1 + 1 = 13 。示例 2:输入:mat = [[0,1,1,0],[0,
2020-07-05 13:57:21
180
原创 P3258 [JLOI2014]松鼠的新家
题目描述松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的。天哪,他居然真的住在”树“上。松鼠想邀请小熊维尼前来参观,并且还指定一份参观指南,他希望维尼能够按照他的指南顺序,先去a1,再去a2,…,最后到an,去参观新家。可是这样会导致维尼重复走很多房间,懒惰的维尼不停地推辞。可是松鼠告诉他,每走到一个房间,他就可以从房间拿一块糖果吃。维尼是个馋家伙,立马就答应了。现在松鼠希望知道为了保证维尼有糖果吃,他需要在每一个
2020-06-24 11:05:31
200
原创 [HNOI2012]矿场搭建
[HNOI2012]矿场搭建题目描述煤矿工地可以看成是由隧道连接挖煤点组成的无向图。为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处。于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后,其他挖煤点的工人都有一条道路通向救援出口。请写一个程序,用来计算至少需要设置几个救援出口,以及不同最少救援出口的设置方案总数。输入格式输入文件有若干组数据,每组数据的第一行是一个正整数 N(N<=500),表示工地的隧道数,接下来的 N 行每行是用空格隔开的两个整数
2020-06-18 11:40:02
421
原创 【状压DP】leetcode LCP13 寻宝
我们得到了一副藏宝图,藏宝图显示,在一个迷宫中存在着未被世人发现的宝藏。迷宫是一个二维矩阵,用一个字符串数组表示。它标识了唯一的入口(用 ‘S’ 表示),和唯一的宝藏地点(用 ‘T’ 表示)。但是,宝藏被一些隐蔽的机关保护了起来。在地图上有若干个机关点(用 ‘M’ 表示),只有所有机关均被触发,才可以拿到宝藏。要保持机关的触发,需要把一个重石放在上面。迷宫中有若干个石堆(用 ‘O’ 表示),每个石堆都有无限个足够触发机关的重石。但是由于石头太重,我们一次只能搬一个石头到指定地点。迷宫中同样有一些墙壁(
2020-05-18 20:53:04
226
原创 【计算几何】凸包之graham算法(适合小白)
计算几何–凸包(graham算法实现)题目链接:LeetCode587 https://leetcode-cn.com/problemset/all/题目描述在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。你需要找到正好位于栅栏边界上的树的坐标。示例 1:输入: [[1,...
2020-04-28 15:23:06
1824
1
原创 P2854 [USACO06DEC]牛的过山车Cow Roller Coaster
题目描述The cows are building a roller coaster! They want your help to design as fun a roller coaster as possible, while keeping to the budget.The roller coaster will be built on a long linear stretch o...
2019-09-18 11:04:41
164
PYTHON JD评论爬虫文件
2023-01-27
USACO 历年全部测试数据
2022-10-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人