返回顶部

随笔分类 -  洛谷

摘要:有旋Treap模板 //pointer version #include <bits/stdc++.h> using namespace std; struct Node { Node *ch[2]; int val, rank; int rep_cnt; int siz; Node(int val 阅读全文
posted @ 2023-05-05 14:21 _Kolibri 阅读(32) 评论(0) 推荐(0)
摘要:洛谷 P2894 [USACO08FEB]Hotel G 题意:$n$个房间,$m$个操作,每次有2中操作,操作1为在$[1,n]$中查询长度为$x$的连续空房间,输出最小的最左端的房间id,然后占用这$x$个房间,操作2使得$[x,x+y-1]$这么多房间空出来. 题解:连续的区间和问题,经典用线 阅读全文
posted @ 2021-11-22 22:10 _Kolibri 阅读(147) 评论(0) 推荐(0)
摘要:题意:有$n$个数,选$k$个数使得它们的和最大,选完某个数后,其相邻两个数不能再选. 题解:将所有数放到大根堆里,用双向链表来存顺序关系,对于堆顶的$a_i$来说,我们如果选了它,$a_$和$a_{i+1}$就不能再选,但是$a_+a_{i+1}$可能比$a_i$大,我们先不管,先将$a_i$贡献 阅读全文
posted @ 2021-05-18 21:08 _Kolibri 阅读(109) 评论(0) 推荐(0)
摘要:题意:RT 题解:可以自己在纸上画画看,对于位置$i$的数$a[i]$,假如它目前的逆序对数为$c[i]$,进行一次冒泡排序后,它前面最大的一个数必然会移动到它的后面去,所以可以推广到:冒泡排序$k$次后,逆序对个数变为$c[i]-k$.那么对某一状态的排列冒泡$k$次后,逆序对个数$\le k$的 阅读全文
posted @ 2021-05-07 11:35 _Kolibri 阅读(95) 评论(0) 推荐(0)
摘要:传送门 分析:对于给出的邻接矩阵,用并查集维护牧场,并求两点的距离,然后对所有点跑一个floyd(因为只有连通的点我们才求了距离,所以可以直接对所有点跑),对于一个牧场,我们可以求出它里面每个点到其他点的最远距离,以及牧场的直径,那么我们再去枚举任意两个点,如果它们不在一个集合内,那么可以得到这两个 阅读全文
posted @ 2021-05-01 16:22 _Kolibri 阅读(65) 评论(0) 推荐(0)
摘要:题意:RT,但是这题不能直接模拟(因为会炸longlong?). 题解:我们可以用线段树来处理,如果是操作1,就找到叶子结点将它修改为$m$,如果是操作$2$,我们就将修改位置的叶子结点修改为$1$即可,这样的话整个操作中就没有除法出现,也应该不会炸long long,每次询问根节点的值即可. 代码 阅读全文
posted @ 2021-04-26 14:08 _Kolibri 阅读(69) 评论(0) 推荐(0)
摘要:题意:RT,老鼠可以在任意两点移动. 分析:由于$n$的范围非常小,我们考虑状压,我刚开始是用一维dp转移的,但是这样的话会出现一个问题,也就是我们从上一个状态转移过来时,会出现不同坐标但状态值相同的情况,那么我们用一维就不能确定哪个坐标是最优的,所以要用二维dp来进行转移.$dp[i][j]$表示 阅读全文
posted @ 2021-04-26 13:25 _Kolibri 阅读(73) 评论(0) 推荐(0)
摘要:题意:给你一个有向图,求最大半连通子图的总节点数和不同最大半连通子图的方案数. 题解: 用tarjan缩点后,注意缩点后建边的时候要判重,因为两个连通子图之间可能有很多条边,跑拓扑排序然后dp更新节点数和方案数即可,具体看代码. 代码: #include <bits/stdc++.h> #defin 阅读全文
posted @ 2021-04-01 13:23 _Kolibri 阅读(75) 评论(0) 推荐(0)
摘要:题意:有一张有向图,每个点都有点权,求某一路径的最大权值,重复经过的点的权值只计算一次. 题解:因为存在环什么的,所以我们直接求肯定不好搞,那么我们可以先进行缩点,当找完一个强连通分量后,将其中的所有点权贡献给缩完后的点,缩完点后可以再建新边,注意这里我为了省空间没有记录两个强连通分量之间的重边,但 阅读全文
posted @ 2021-03-31 11:45 _Kolibri 阅读(59) 评论(0) 推荐(0)
摘要:题意:有$n$个点,对这些点进行$m$次染色,第$i$次染色会把区间$(ip+q)\ mod\ N+1$和$(iq+p)\ mod\ N+1$之间的点染成颜色$i$,问最后这$n$个点的颜色. 题解:我们可以反着从第$m$次开始染,因为后面的会把前面点的颜色覆盖,所以倒着来的话,下一次染的时候就可以 阅读全文
posted @ 2020-11-13 09:19 _Kolibri 阅读(93) 评论(0) 推荐(0)
摘要:题意:有$n$个罪犯,$m$对罪犯之间有仇,现在将这些罪犯分到两个监狱里去,问两个监狱里有仇罪犯之间的最大权值最小为多少. 题解:先按边权从大到小排序,然后贪心,边权大的两个罪犯,我们一定要先让他们两人分到不同的监狱中,这里我们就可以用并查集来维护, 用种类并查集每次维护两个罪犯的关系,如果他们不在 阅读全文
posted @ 2020-11-13 01:34 _Kolibri 阅读(92) 评论(0) 推荐(0)
摘要:题意:C和D打牌,每张牌有花色和点数,小D刚开始的分数为$v$,不管输还是赢,只要小D出了牌(花色必须相同),就能得到那张牌点数的分数,若是赢了(点数不小于D的牌),他可以另外加$c$分,输了就要扣$c$分,现在D知道了C的出牌情况,问他最多能拿多少分,并输出出牌情况. 题解:首先,假如他两的牌花色 阅读全文
posted @ 2020-10-21 20:34 _Kolibri 阅读(124) 评论(0) 推荐(0)
摘要:题意:有$n$个数,起始值均为$0$,进行$q$次操作,每次输入三个数,如果第一个数为$1$,则将第$i$个数修改为$j$,如果为$2$,则求区间$[l,r]$内的所有子区间的异或和. 题解:在纸上写一写画一画,能够发现规律,如果区间的左端点$l$和右端点$r$奇偶性不同,那么这个区间内的所以子区间 阅读全文
posted @ 2020-10-21 19:48 _Kolibri 阅读(153) 评论(0) 推荐(1)
摘要:题意:有一个长度为$n$的数组,进行$m$次操作,每次读入一个值$t$,如果$t=1$,则将区间$[l,r]$的数字反转,若$t=2$,则查询下标为$i$的值. 题解:树状数组的板子题,但是考察到了位运算的知识,我们对区间进行反转的时候,只需要对树状数组$c[l]$ ^ 1,\(c[r+1]\) ^ 阅读全文
posted @ 2020-10-21 19:32 _Kolibri 阅读(124) 评论(0) 推荐(0)
摘要:题意:给你一组数,询问$q$次,问所给区间内的最大值和最小值的差. 题解:经典RMQ问题,用st表维护两个数组分别记录最大值和最小值然后直接查询输出就好了 代码: int n,q; int a[N]; int dp1[N][30],dp2[N][30]; int lg[N]; void lg_Ini 阅读全文
posted @ 2020-10-21 19:20 _Kolibri 阅读(104) 评论(0) 推荐(0)
摘要:题意:有$n$个点对,找到它们之间的最短距离. 题解:我们先对所有点对以$x$的大小进行排序,然后分治,每次左右二等分递归下去,当$l+1=r$的时候,我们计算一下距离直接返回给上一层,若$l==r$说明只有一个点,不能构成线段,返回$INF$,于是当前区间的左右两边的最短距离我们找到了,之后还有一 阅读全文
posted @ 2020-10-14 12:47 _Kolibri 阅读(185) 评论(0) 推荐(0)
摘要:题意:有$n$种花,每种花有$a_i$盆,现在要摆$m$盆花,花的种类从$[1,n]$有序排放,问有多少种方案数. 题解:这题可以借用01背包的思路,感觉更好想一点,我们首先枚举$n$种花,然后按一维01背包的思路,再枚举第$i$种花的选取盆数$[1,min(a_i,j)]$,每次状态都由$dp[j 阅读全文
posted @ 2020-10-08 00:43 _Kolibri 阅读(116) 评论(0) 推荐(0)
摘要:题意:有一个$n$个点的有向图,从$1$出发,问是否有负环. 题解:我们可以用SPFA来进行判断,在更新边的时候,同时更新路径的边数,因为假如有负环的话,SPFA这个过程一定会无限重复的遍历这个环,那么这个环中的边数也就会不断增加,因为我们只有$n$个点,所以假如某条路径的边数$\ge n$时,就说 阅读全文
posted @ 2020-07-26 18:06 _Kolibri 阅读(138) 评论(0) 推荐(1)
摘要:题意:有一$n$个点,$m$条边的双向图,每条边都有花费和流量,求从$1$~$n$的路径中,求$max\frac{min(f)}{\sum c}$. 题解:对于c,一定是单源最短路,我们可以用dijkstra,但是这个最小流量不是很好搞,但是题目所给的数据范围较小,所以我们可以直接枚举最小流量,然后 阅读全文
posted @ 2020-07-17 18:25 _Kolibri 阅读(240) 评论(0) 推荐(0)
摘要:题意:你刚开始位于坐标轴的$(0,0)$点,一共有$m$颗流星砸向地面,每颗流星在$t$时砸到$(x,y)$点,其四周上下左右也均有波及,你每秒可以向上下左右移动一个单位,问你是否可以移动到安全的地方(没有被流星波及的点),求最小步数. 题解:这题细节有点多,但也是一个基本的bfs,首先我们要用一个 阅读全文
posted @ 2020-06-16 10:48 _Kolibri 阅读(374) 评论(0) 推荐(0)