自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 洛谷 P2071 座位安排(dinic网络流求二分图的最大匹配)

对于我们建成的流网络,满足流量守恒和能量守恒。因此,求出的最大流即为最终的答案。显然,这是一个求二分图的最大匹配数问题,我们可以使用dinic算法进行求解。对于每一排座位,我们向汇点。,我们向每个人都连一条容量为。

2024-10-08 21:21:41 225

原创 洛谷 P2783 有机化学之神偶尔会做作弊(Tarjan边双连通分量,LCA,并查集)

在一张无向连通图图上,将所有的环全都缩成一个点,我们可以使用Tarjan边双连通分量进行。两个点之间的节点个数,可以先预处理出这棵树的LCA。在这棵树上,我们想要快速求出。缩点之后的图一定是一棵树。

2024-10-08 20:41:22 804

原创 Codeforces Round 316 (Div. 2) D题 Tree Requests(二分,dfs,在线,前缀异或)

将每个深度的结点按照dfs序放到一个vector里,同时记录每个vector对应的前缀异或。对于每一个询问x,只需在给定深度里找到。R[x]的两个端点,取区间异或和即可。个字母全部当作一个二进制数。

2024-10-07 21:55:26 279

原创 Codeforces Round 264 (Div. 2) D题 Gargari and Permutations(建图,有向无环图求最长路)

连一条有向边,容易发现建成的图是一个即有向无环图(DAG),只需要求出DAG的最长路即可。在这里,我们采用拓扑排序和dp进行求解。因此我们可以对所有满足条件的。若在所有的排列中,每一对。,这是一个很小的数。

2024-10-07 20:28:30 618

原创 Codeforces Round 977 (Div. 2)E1 Digital Village (Easy Version)(Floyd,贪心)

之后,我们通过在线操作,每次贪心地选出最优的一个城市,并不断更新答案。算法预处理出任意两座城市之间的最大延迟时间。时的最优解,之后从剩下的点里面挑出一个能够使。时最优的点,以此类推。

2024-10-06 21:54:42 613 1

原创 Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)

数组单调不减时才会有解。名成员最早上场的时间。

2024-10-06 19:52:16 935

原创 AtCoder Beginner Contest 374 E题 Sensor Optimization Dilemma 2(二分,贪心)

因此我们可以直接枚举性价比低的那一台机器的数量,贪心地。中性价比低的那一个不会选太多。我们很容易想到直接二分答案。

2024-10-05 22:05:27 1151

原创 AtCoder Beginner Contest 372 F题(dp)

显然,无论是时间复杂度还是空间复杂度都无法接受。条边移动后的端点进行更新答案,相当于变相的移动了。我们发现,状态转移方程的前半部分实际上是对。对于这种计数问题,我们很容易想到dp。最大不会超过50,因此我们可以考虑以。我们可以转换一下,我们假设。为突破口对dp进行优化。数组循环移动一位,且。,因此我们可以只考虑。

2024-10-05 18:03:07 864

原创 AtCoder Beginner Contest 373 E题 How to Win the Election(二分套二分)

很明显,答案是具有单调性的,我们考虑二分答案。因此我们可以在前缀和数组上再次二分,直接判断。数组从大到小排序后的前缀和数组。),若是想要其当选,则将剩下的。个数,我们假设给其增加。票给其他候选者之后,比。

2024-10-04 21:51:25 1080

原创 Codeforces Round 922 (Div. 2) D题 Blocking Elements(单调队列优化dp)

个位置,且两个屏蔽点间的元素和的最大值不超过。数组都单调递增,因此我们可以使用单调队列优化。,那么有:两个屏蔽点间的元素和不大于。我们在原序列的基础上加上两个虚拟点。假设我们已经确定答案不会超过。,所有屏蔽点的权值和不大于。我们很容易想到二分答案。的区间,无论是前缀和数组。,将时间复杂度降至线性。

2024-10-03 16:59:25 782

原创 Codeforces Round 121 (Div. 1) C题 Fools and Roads(LCA最近公共祖先,树上差分)

先预处理出这棵树的LCA,之后对于每一对。树上差分记得从叶子向根节点,不要弄反。一道比较板的LCA和树上差分的题。,在树上做差分,最后用。

2024-10-03 11:33:14 279

原创 洛谷P1966 [NOIP2013 提高组] 火柴排队(树状数组,排序不等式)

之后,我们只要求出位置的逆序对,即为最终答案。排完序之后,我们便可以知道,对于原先的。是一个定值,因此我们只需要最小化。其最后应该移动到哪一个位置上。因为排序不等式,所以当序列。因为我们要使得最终的结果。按从小到大排序之后,

2024-10-02 22:06:23 923

原创 Codeforces Round 976 (Div. 2)(A,B,C,D,E)并查集,区间合并,概率dp

对于合并后的区间,我们使用并查集进行暴力缩点,最后统计连通块的数量即可。之后,我们按照分好的每个小组依次进行区间合并。灯泡最后为开或关,与开关灯的操作次数有关。,因此最后开着的灯的操作次数为偶数。因为,只有平方数有奇数个因数,所以。因此我们可以直接二分查找答案求解。的该位取什么值,然后分类讨论即可。所以可以从高位到低位贪心地确定。每次开关灯的条件是包含因数。依次对每一个区间进行分组。排除所有平方数的个数即为。的整次幂从大到小枚举。

2024-10-02 20:21:07 1132

原创 Codeforces Round 975 (Div. 2)(A,B,C,D线段树解法,E)

因此我们可以用线段树动态维护区间最大值,区间查询操作为加减,枚举每一个。我们考虑预处理出每一个区间对答案产生的贡献。的时候,只需要对原先的卡牌进行分组即可。分别求出奇数位和偶数位的最大值,之后进行比较即可。因此,我们可以预处理出前缀最小值和后缀最小值。这个时间节段的每一个节点已经被征服了多少个点。个卡牌分为一组,对于我们最后一组的卡牌,会有。表示卡牌个数最多的那个卡牌类型的数量。的区间,每一个点都减去对应的时间。个,如果我们想要将其补全,需要再添加。的时候,我们依旧假设可以将每。中间的数对答案产生的贡献。

2024-09-30 22:28:11 1588

原创 洛谷P3045 [USACO12FEB] Cow Coupons G(堆,反悔贪心)

这里,每一个物品用优惠卷节省的钱可以使用优先队列。个最小的优惠假,再考虑如何反悔。表示一个已经使用了优惠卷的物品,表示一个未购买的物品。表示现在用了多少钱,如果要换成用原价购买。

2024-09-27 13:19:22 844

原创 洛谷P4185 [USACO18JAN] MooTube G(带权并查集)

个视频推荐列表中将推荐的视频数实际上就是缩点之后该点所在联通块的点的数量。这样从大到小的处理,不会影响后面答案的计算。我们可以采用离线做法。先将每一对关系按照相关性。按照从大到小排序,之后将所有的询问按照。因此,我们考虑使用并查集。

2024-09-26 21:27:04 640

原创 Codeforces Round 301 (Div. 2) C题 Ice Cave(BFS)

从起点开始,向四个方向进行扩展,每到达一个节点就修改一下该节点的状态(如果该节点是完整的冰块),如果能走到终点就是YES,否则就是NO。

2024-09-26 20:18:58 227

原创 Codeforces Round 668 (Div. 1) B题 Tree Tag

【代码】Codeforces Round 668 (Div. 1) B题 Tree Tag。

2024-09-26 19:14:08 803

原创 Codeforces Round 946 (Div. 3) E题 Money Buys Happiness(dp)

点幸福能够剩下的最大价钱。最后要给每一个大于等于。

2024-09-26 16:38:31 405

原创 Codeforces Round 592 (Div. 2) C题 The Football Season(Exgcd)

因此本题使用扩展欧几里得即可。

2024-09-26 15:10:26 354

原创 Codeforces Round 578 (Div. 2) E题 Compress Words(扩展KMP)

部分进行拼接,然后使用扩展KMP算法求出。数组的含义可以直接计算答案。

2024-09-25 22:16:16 1252

原创 洛谷P7335 [JRKSJ R1] 异或(dp,前缀异或)

我们可以使用前缀异或和,这样我们就可以把区间转为两个数的异或和,因此。但是,每一次转移都是一段连续的区间,通过枚举点。一维数组单调不降,我们可以合并这些连续段。有很长一段的值是连续且相等的,又因为。因为数据随机,我们通过打表发现序列。内一段异或区间的异或和的最大值。数组可以直接预处理得到。个区间的最大值,答案为。

2024-09-25 20:37:59 645

原创 Codeforces Global Round 19 D题 Yet Another Minimization Problem(推式子,01背包变形)

因此最后的结果为答案的一半)。是一个定值,我们只需要计算。

2024-09-24 23:09:19 739

原创 Educational Codeforces Round 110 (Rated for Div. 2) D题 Playoff Tournament(线段树,模拟)

容易发现,所有的比赛可以看成一棵满二叉树,因此我们可以使用线段树进行求解。,其左子树代表编号更小的参赛选手,右子树代表编号更大的参赛选手。对于每一次的单点修改,我们可以使用两个。我们规定,对于线段树上的一个节点。对线段树中的节点下标与字符串。,则线段树对应节点的。,则线段树对应节点的。,则线段树对应节点的。

2024-09-24 21:23:56 1060

原创 Educational Codeforces Round 61 F题 Clear the String(区间dp)

相同时,两侧的字符可以同时消去,并不会影响答案。的状态已经处理好,因此当其两侧的字符。看到数据范围我们很容易想到区间。处理到当前长度的时候,其长度减。

2024-09-24 20:22:16 621

原创 洛谷P4551 最长异或路径(字典树,异或)

因此我们可以对根节点到每一个节点的异或和按照二进制的形式插入到。因为一个数同时对异或两个相同的数,其值不变。路径上的异或和可以表示为从根节点到。树上,最后贪心求得最终的答案即可。因此我们很容易发现,对于节点。

2024-09-24 19:17:39 554

原创 Codeforces Round 891 (Div. 3) G题 Counting Graphs(最小生成树,快速幂维护加权方案数)

考虑将给出的树的边按照权值从小到大排序,并模拟最小生成树的过程。算法在每次合并两个连通块的过程中,会浪费掉两个连通块大小乘积。最后,用快速幂维护枚举每条边时可行方案数的乘积即可。被浪费掉的边,可以选择的权值为。(因为有不选的情况,所以要。当前枚举的这条边的权值。

2024-09-23 17:26:48 513

原创 Educational Codeforces Round 161 D题 Berserk Monsters(双向链表,模拟)

记录下一轮有可能被删除的点的下标,用链表维护当前存在的序列。被删掉,则下一轮可能被删掉的点为其前驱和后继。的前驱和后继也都没有被删掉,则元素。在下一轮也不会成为被删除的点。没有被删掉,而当前序列的。

2024-09-23 00:03:00 883

原创 洛谷P2014 [CTSC1997] 选课(树上背包)

显然,父节点的信息可以由子节点合并得到并且不会影响子节点。首先,我们发现,如果0算一个节点的话,整张图就是一棵树。因此本题转化成了经典的01背包问题。时可以获得的最大学分。个子节点,背包容量为。

2024-09-22 17:36:12 431

原创 Educational Codeforces Round 67 E题 Tree Painting(换根dp)

再考虑父节点的方向的贡献,也就是图中红圈中的部分。号节点孩子的贡献,也就是图中绿圈中的点,答案为。如果枚举每一个点来计算答案,时间复杂度为。号节点相连的子树都会产生贡献,也就是。,会超时,因此我们考虑使用换根。数组从父节点向子节点进行转移。号节点为根的子树,其他与。

2024-09-22 13:59:51 663

原创 牛客小白月赛101

因此我们可以先用前缀和进行预处理,之后暴力枚举每一个连续子数组,对于和为完全平方数的连续子数组,我们对整个区间的个数加。找每个没有出现的数,他的倍数都是false的,其余的都是true。因此,本题便转化为了区间加减的问题,可以使用树状数组进行求解。因此我们可以使用类似于前缀和的方式,用栈从前往后模拟,类似于括号匹配。上,又因为前面已经假设放了。个数字不能放了,所以答案与。表示有多少个数字可以放到。个数字,那么当前位置就有。时间复杂度为调和级数。的区间的和的最大值。

2024-09-20 22:46:25 1612

原创 洛谷P1640 [SCOI2010] 连续攻击游戏(二分图,匈牙利算法,时间戳)

因为每件装备只能用一次,如果把攻击序列建成点,则本题可以看成是装备和攻击顺序的二分图匹配,因此可以采用匈牙利算法进行求解。因此我们可以打上一个时间戳来避免超时。

2024-09-20 21:31:47 368

原创 洛谷P1131 [ZJOI2007] 时态同步(树形dp)

在本题中,我们可以用节点深度来替代距离。我们可以先找到最深的叶子节点,再从最小的子树开始,通过最近的树枝,将所有的叶子节点调整到同一深度。以此类推,直到整颗树都被调整完成。我们调整靠近根节点的树枝时,其下叶子节点距离根节点的距离都会增加。因此,调整越靠近根节点的树枝所需要付出的代价就越少。

2024-09-20 17:51:09 827

原创 洛谷P1110 [ZJOI2007] 报表统计

本题不需要平衡树,只需要一个邻接表和两个multiset即可

2024-09-19 20:21:25 875

原创 洛谷P1955 [NOI2015] 程序自动分析(并查集)

不在一个联通块,则继续向下处理,否则直接输出NO。最后,如果没有矛盾,则输出YES。用并查集连接成一块。,所以本题需要先进行离散化处理。的情况,将相等的两个。

2024-09-19 18:54:24 645

原创 Codeforces Round 967 (Div. 2) D题 Longest Max Min Subsequence(模拟,栈)

第一步:我们先考虑每个元素恰好出现一次的子序列中字典序最小的序列如何求得。我们可以维护一个栈,从前往后遍历,如果新加入的元素比栈尾元素小,就将其弹出,保证字典序最小。因为要保证每个元素恰好出现一次,因此我们可以使用一个标记数组,标记哪些元素已经入栈。对于已经在栈内的元素,我们选择不进行任何处理。第二步:考虑如何维护栈中的元素,使得奇数位最大化,偶数位最小化。我们可以同时考虑栈顶的前两个元素,以保证维护一个波浪形的栈。对于长度相等的子序列,转化为最大化奇数位,最小化偶数位,因此我们考虑用栈进行模拟。

2024-09-19 17:55:15 336

原创 洛谷P1717 钓鱼(多重背包)

在每一个地方都可以钓任意时间的鱼,但当钓鱼的时间长了之后能钓的鱼的数量就会变成负数,,因此这是一个多重背包问题。个池塘能钓的鱼少了多少。

2024-09-18 22:12:01 853

原创 2022年ICPC杭州站K题(字典树)

将输入的字符串依次插入到字典树中。我们发现,在插入字符串时,我们可以用当前正在插入的字符对应节点的。数组之后,对于每一个询问,我们只需要根据新的字典序和。表示在字典树中,新增字符为。本题考虑使用字典树。时,该字符所在节点的。

2024-09-18 20:39:43 875

原创 Codeforces Round 613 (Div. 2) D题 Dr. Evil Underscores(Trie上树形dp)

如果点u只有一个儿子,那么我们需要构造的数x的第k位就选这个儿子代表的数(0/1),这样在异或之后就可以相互抵消。假设点u的儿子表示的是第k位,那么点u的儿子的就是:左儿子这边的数第k位上是1,右儿子这边的数第k位上是0。如果点u有两个儿子,那么我们需要构造的数x的第k位无论选什么都会有。

2024-09-14 14:29:15 889

原创 Codeforces Round 644 (Div. 3) G题 A/B Matrix

每一行都要有a个1,每一列都要有b个1。在构造矩阵时,我们在每一行都放连续的。时,输出NO,否则为YES。,这样就满足了“每一行都有。,都放在上一行最后一个。的后面(如果到达了第。

2024-09-14 12:42:52 931

空空如也

空空如也

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

TA关注的人

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