- 博客(26)
- 收藏
- 关注
原创 F. Microcycle(并查集+思维)
思路:题意是找一个拥有最小边权的环,首先是确定怎么找环,可以用并查集维护一下,如果两点不在一个集合里则将两点合并,如果新找的边的两个点本身就在一个集合,那么这条边可以构成一个环。我们将边权从大到小排序后通过上面所说的遍历所有的边,每次找到新的第二种情况,就把此边当环的最小边权。结束后最终的得到的就是环的最小边权,两点为u,v。然后我们将除这条边的其他边去建图,然后用pre数组去维护路径,最终找到一条新的从u到v的路径就是答案。
2024-02-08 21:52:04 402
原创 D. Cow and Snacks(并查集+思维)
思路:因为一个客人一定会喜欢两种不同的食物,那么一名客人吃了两种食物后,其他喜欢其中一种食物的客人就会吃另一种食物,多个客人形成这种关系后,可以抽象成一个有k个节点的联通块,可以满足k-1名客人,n种食物可以有多个连通块,假设有C个,那么n-C就是能满足的客人数量,那么伤心的则是m-(n-k);连通块数量可以用并查集来维护。
2024-02-04 21:50:28 253
原创 P - 纳西妲的树
可以先通过一次dfs去计算所有的点到节点1的路径异或和,同时记录一下1到其他点是否有符合k的数量。然后我们通过遍历每个异或和,计算他出现的次数乘他与k异或后的值出现的次数,然后把乘积都加起来就是除了根节点以外从u到v的异或和为k的数量,因为这个u,v是不分大小的,而题目分大小,因此将这个和除以2,最后再加上一开始统计的1到其他点是否有符合k的数量就是答案。再解释一下“计算他出现的次数乘他与k异或后的值出现的次数”这种话,d数组是节点1到其他点的异或和。因此我们可以直接让当前值与k异或直接得到d[v]。
2024-02-04 14:41:03 201
原创 AcWing 2240. 餐饮(最大流+拆点)
思路:可以将牛拆成两个点,为nowi ->newi ,容量为1,先让源点指向饮料,容量为1,饮料指向nowi,newi指向美食,容量为1,最后美食指向汇点。这样就可以实现一只牛匹配一个饮料和一个美食。
2024-01-17 17:11:25 512
原创 AcWing 2187. 星际转移问题(网络最大流)
再枚举每个空间站,假设人在当天并没有走,而是待在空间站一晚,则增加一条容量为正无穷的边从((当前天数-1)*(n+2)+i)到 (当前天数*(n+2)+ i) i为当前空间站的编号;(f为经过dinic算法后的网络,f‘为再此继承上新扩大的网络,f+f’为不经过dinic的网络并扩增后的网络)不断更新最大流。在枚举每个飞船去记录新增的边,容量为飞船的容量,从前一天的空间站u到这一天的空间站v。在枚举天数时,增加一条从月球(当前天数*(n+2+月球)到虚拟汇点的边,容量是正无穷。
2024-01-17 11:21:32 583
原创 Pick The Sticks(01背包改版)
题目大意:你有一条L长的管子,选择n种长度的金条将其放入管中,每根金条都有它的对应的价值,用最好的方法使能选取的金条价值最高,两端允许插入中心位于管中的金条。思路:01背包的改版,需要考虑金条放入管的两端时的状态。
2023-08-14 19:17:25 72
原创 A - Amanda Lounges (dfs+二分图染色)
思路: 可以先将一定有两个或没有贵宾室的节点染色,没有染为1,有染为2,然后对其他点进行的两次dfs,一次假设染,一次假设没染,第二次dfs经过的点之后将不再遍历,求出两次的dfs合法结果的最小值,如果两次都不合法就输出:”impossible“。将所有的最小值加起来,最后再加上一开始染为2的节点,就是题目要求的最小贵宾室数量。题意:给你若干条航线,要么两边都有贵宾室,要么只有一个,要么一个也没有。
2023-08-12 16:58:06 91 1
原创 P4017 最大食物链计数(dp,拓扑排序)
思路:由题意可知,食物链组成了一个有向拓扑图,可以通过vector建图连接这些生物,后一种生物可以继承到达前一种生物的所有最大食物链数量,因此可以使用拓扑排序将从生产者开始遍历。
2023-08-05 09:48:44 194 1
原创 P1434 [SHOI2002] 滑雪(DP)
在上面的例子中,一条可行的滑坡为 $24-17-16-1$(从 $24$ 开始,在 $1$ 结束)。当然 $25$-$24$-$23$-$\ldots$-$3$-$2$-$1$ 更长。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。输入的第一行为表示区域的二维数组的行数 $R$ 和列数 $C$。下面是 $R$ 行,每行有 $C$ 个数,代表高度(两个数字之间用 $1$ 个空格间隔)。每个点进行类似bfs搜索操作,对遍历过的点进行标记,下次不再遍历。
2023-08-05 00:01:20 65 1
原创 D - Lowbit
思路:因为一个数不断进行lowbit最后得到的数将会是lowbit之前的数,也就是相加后是之前一个数的二倍,可以优先处理这些数,最后二倍 的处理区间。
2023-08-02 20:17:44 69 1
原创 C2. Powering the Hero (hard version)(优先队列板子)
思路:我们通过题意可以知道如果摸到奖励卡就要选择的放到顶端或弃掉,遇到英雄卡,那他将继承牌堆顶的那张牌的力量,因此需要规划好那些排放到牌堆上,因此可以通过使用优先队列的形式,将摸到英雄牌前的奖励卡,放到队列中自动排序。每次取队头,最后没取的牌就是弃牌,取了的则是英雄力量。
2023-07-28 19:32:14 297 1
原创 P2678 [NOIP2015 提高组] 跳石头
这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 $N$ 块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。由于预算限制,组委会至多从起点和终点之间移走 $M$ 块岩石(不能移走起点和终点的岩石)。思路:可以二分一下0到终点的距离,判断每个距离所需的石头数,与能移动的石头数比较。
2023-07-25 09:10:01 46
原创 P1570 KC 喝咖啡(二分+贪心)
由于 KC 急着回去刷题,所以他想尽快喝到这杯咖啡,但他又想喝到美味的咖啡,所以他想出了一个办法,他要喝到 $\dfrac{\sum v _ i}{\sum c _ i}$ 最大的咖啡,也就是单位时间的美味度最大的咖啡。这天,KC 想要喝一杯咖啡,服务员告诉他,现在有 $n$ 种调料,这杯咖啡只可以加入其中的 $m$ 种(当然 KC 一定会加入 $m$ 种,不会加入少于 $m$ 种的调料),根据加入的调料不同,制成这杯咖啡要用的时间也不同,得到的咖啡的美味度也不同。
2023-07-24 20:27:33 117
原创 B - Balanced Diet(贪心+前缀和)
第i个颗的价值为ai,类型为bi。然后分母是所有的g[ i ][ j ]的加和(i为糖果的类型,j为选择糖果的数量,j要大于了L[ i ].LL,并且如果j > g[ i ].size()(也就是该类型糖果的数量),则 j = g[ i ].size()),然后计算每个S/C然后记录它最大时的S和C。:我们需要开一个二维vector去存储每种类型糖果的每颗的价值,然后从大到小排,通过计算前缀和去实现选择该类型糖果多少颗的最大化(用g[ i ][ j ]代替),同时记录一下所有类型中最多的那种的数量ma。
2023-07-19 11:00:20 120
原创 A - Coffee Break
Monocarp得到一份工作,每天要工作 m 分钟,他有一个爱好,喜欢在休息的时候喝咖啡,但是他的老板不乐意了,就给他规定了个时间 d,在 d 分钟内只能喝一杯咖啡。现给出Monocarp喝 n 杯咖啡的时间点,问最少需要几天喝完?并输出每个时间点的咖啡在第几天喝。
2023-07-17 15:32:29 107 1
原创 D - Masquerade strikes back
dt用于离散化,mp预处理记录出现次数在进行判断,vis判段vector对于一个数是否存完所有乘的方法,mk用于记录一个数在循环中遍历到的位置,md用于输出一个数对应vector的位置。题目大意:求出每个数的a*b,同一个数的a*b不能重复。
2023-07-17 13:56:56 128 1
原创 K - Medians and Partition
例如,数组[10,3,2,3,2]的中位数是3(即[2,2,3,3,10])。设数组[a1, a2,…],和]是子数组{b1, b2,…, bk}使得b1 =[a1, a2, ai1], b2 = [ai1 + 1、+ 2,ai2], bk = [aik-1 + 1, aik-1 + 2,,一个)。例如,array[10 3 2 3 2]可以分割如下:{[10 3 2 3 2]}或{[10],[3],[2],[3],[2]},或{[10],[3、2、3、2]},或{[10 3],[2],[3 2]}等等。
2023-07-17 11:27:40 106 1
原创 Acwing173. 矩阵距离(多源BFS)
题目链接:173. 矩阵距离 - AcWing题库给定一个 N行 M列的 0101 矩阵 A[i][j] 与 A[k][l]之间的曼哈顿距离定义为:dist(A[i][j],A[k][l])=|i−k|+|j−l输出一个 N行 M列的整数矩阵 B,其中:B[i][j]=min(dist(A[i][j],A[x][y])),1≤x≤N,1≤y≤M第一行两个整数 N,M。接下来一个 N行 M 列的 0101 矩阵,数字之间没有空格。一个 N 行 M 列的矩阵 B,相邻两个整数之间用一个空格隔开。1≤N,M≤10
2023-07-10 15:50:44 114 1
原创 J - Ginger的牧场(二分图,匈牙利算法)
题目:Ginger 是个牧场主,他一共养了 n 头牛,他的牧场里有 m 头母牛和 n−m 头小牛。有一天 GingerGinger 发现有的小牛被好多头母牛喂养,有的小牛却没有母牛喂养。他想出来了一个办法:尽可能多地把母牛和小牛一一配对,使得被母牛喂养的小牛尽可能多。他想问你能得到喂养的小牛最多有多少头?
2023-06-20 21:52:17 44
原创 R - Zyn的超能力
Zyn 需要能量提高自己的超能力,有两种能量存在:超级能量和小能量。对于超级能量,Zyn 绝对不可以错过,而且努力的 Zyn 希望得到更多的小能量。但是 Zyn 每天最多可以获得k次能量,而且每个能量都会在第xi天后消失,Zyn 希望你可以帮助他求出得到的小能量的最多数量。
2023-06-02 11:44:46 56
原创 5030. 核心元素(纯暴力枚举)
如果以1为结尾,那1对应的数+1,然后判断这个数出现的次数与该子数组中的出现最多数的数量,如果比它大就赋值,记录这个数,也就是要求的核心元素,并令这个核心元素的数量+1,以此类推。此外,如果数组中出现次数最多的元素不唯一,则出现次数最多的元素中数值最小的那个元素为数组的核心元素,例如数组 [1,2,2,3,3][1,2,2,3,3] 的核心元素为 22。我们规定,数组中出现次数最多的元素为数组的核心元素,例如数组 [1,1,1,2,3][1,1,1,2,3] 的核心元素为 11。子数组的核心元素为 i。
2023-06-01 00:15:11 62
原创 P1080 [NOIP2012 提高组] 国王游戏(贪心+高精度)
排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。如果S*a1/b2>=S*a2/b1,那么Max(S/b1,S*a1/b2)>=Max(S/b2,S*a2/b1);接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。
2023-05-31 23:45:17 223 1
原创 G - 小彬的周赛(easy)
然后查询从0~30位,从第一个数开始,如果该数的i位置为1,则代表按位与的和不为0,数组长度+1;否则判断ma与cnt最大值,然后长度为0;先将数组中的每个数转化成二进制逆序放到数组中,例如将6转化为二进制110,然后放到数组下标0~2的为011;下标对应着该数的第几位。题意:对数组num的子数组进行按位与,返回按位与结果大于0的最长组合数组的长度。如果一群数的按位与大于0,则必然有一位全是1.
2023-05-27 20:36:02 53 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人