随笔分类 -  算法竞赛

ACM/ICPC/CCPC
摘要:DFS序及其应用 定义 按照深度优先搜索(DFS)的访问顺序对树节点进行排序,即得到树的dfs序。 性质 在dfs序中,每个节点及其整个子树的节点的dfs序是一段数值连续的编号 因此对于子树的操作,就可以转化成对于一段区间的操作。可以与 线段树 和 树状数组 结合使用。 包括后续的 树链剖分。 基本 阅读全文
posted @ 2025-05-24 15:31 Showball 阅读(147) 评论(0) 推荐(1)
摘要:练习题题解 第1题 连通块 DP CF 1051 D 题目链接 给定一个 \(2\) 行 \(n\) 列的矩阵 \(a\) ,你可以在矩阵中填数,任选第 \(i\) 行第 \(j\) 列,可以填 \(1\) 或 \(0\) ,即可以使 \(a[i,j]=0\) 或使 \(a[i,j]=1\) ,填满 阅读全文
posted @ 2025-05-04 12:01 Showball 阅读(41) 评论(0) 推荐(0)
摘要:洛谷题单 【数据结构2-1】二叉堆与树状数组 P1878 舞蹈课 优先队列+模拟 题目链接 每次要取出最小值,考虑用优先队列维护。维护出跳舞的两个人的 \(id\) 以及技术相差值。 然后每次取出队头元素,判断左右两边的是否可以构成新的舞伴加入优先队列即可。 注意:每个人只能和一个人组成舞伴,所以要 阅读全文
posted @ 2024-12-18 22:19 Showball 阅读(80) 评论(0) 推荐(0)
摘要:Kruskal 重构树学习笔记 参考博客 链接 性质 这里给定最小生成树 Kruskal 重构树 的性质,那么最大生成树 Kruskal 重构树 的性质可以同理得。 重构树是一棵恰有 n 个叶子节点的完满二叉树,每个非叶子节点都有两个儿子,共有 2n−1 个点。(初始图中的 n 个点是叶子,由于是棵 阅读全文
posted @ 2024-12-14 03:36 Showball 阅读(48) 评论(0) 推荐(0)
摘要:洛谷题单 算法2-3 字符串 KMP模板 使用前保证字符串下标从 \(1\) 开始。e.g. s="?"+s; template<class Type> struct KMP{ vector<int> init(Type s){ int n=(int)s.size()-1; vector<int> 阅读全文
posted @ 2024-12-10 01:55 Showball 阅读(42) 评论(0) 推荐(0)
摘要:可持久化Trie--区间异或最值问题 应用:在 \(O(logn)\) 时间复杂度解决 查询区间 \([l,r]\) 内与数 \(x\) 异或的最大值。 插入操作:把 \(n\) 个整数插入 \(01Trie\),生成 \(n\) 个版本的可持久化树。 查询操作:利用前缀和与差分的思想,用两颗前缀 阅读全文
posted @ 2024-12-09 21:28 Showball 阅读(47) 评论(0) 推荐(0)
摘要:P3369 【模板】普通平衡树 题目链接 您需要动态地维护一个可重集合 \(M\),并且提供以下操作: 向 \(M\) 中插入一个数 \(x\)。 从 \(M\) 中删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 查询 \(M\) 中有多少个数比 \(x\) 小,并且将得到的答案加一。 阅读全文
posted @ 2024-12-08 18:38 Showball 阅读(19) 评论(0) 推荐(0)
摘要:洛谷题单 算法2-3 分治与倍增 P2345 [USACO04OPEN] MooFest G 树状数组 题目链接 思路: 让我们求所有两两之间 \(max(v_i,v_j)\times |x_i-x_j|\) 的值之和。 经典思路,考虑每个数对答案的贡献。对于每个数 \(v\),会产生所有比 \(v 阅读全文
posted @ 2024-12-02 05:24 Showball 阅读(142) 评论(0) 推荐(0)
摘要:Atcoder Beginner Contest 380 题解 (A-G) 题目链接 A - 123233 #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ string s; cin 阅读全文
posted @ 2024-11-20 01:09 Showball 阅读(69) 评论(0) 推荐(0)
摘要:Atcoder Beginner Contest 379 (A-F) 题目链接 A - Cyclic #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ char a,b,c; cin> 阅读全文
posted @ 2024-11-14 19:44 Showball 阅读(44) 评论(0) 推荐(0)
摘要:洛谷题单 算法2-2 常见优化技巧 单调栈 单调栈最经典的应用,就是在一个数列里寻找距离元素最近的比其大/小的元素位置。 模板题,寻找每个元素右边第一个比它大的元素下标。 stack<int> s; for(int i=n;i>=1;i--){ while(s.size()&&a[s.top()]< 阅读全文
posted @ 2024-11-13 15:18 Showball 阅读(103) 评论(0) 推荐(0)
摘要:AtCoder Beginner Contest 378 题解 比赛链接 A - Pairing 贪心 #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ vector<int> a(5 阅读全文
posted @ 2024-11-12 19:47 Showball 阅读(86) 评论(0) 推荐(0)
摘要:对顶堆动态维护第k大的值。 #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ int n,w; cin>>n>>w; priority_queue<int,vector<int>,gr 阅读全文
posted @ 2024-10-22 14:47 Showball 阅读(31) 评论(0) 推荐(0)
摘要:AtCoder Beginner Contest 375 (A-G) 比赛链接 A - Seats #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ int n; string s; 阅读全文
posted @ 2024-10-21 15:32 Showball 阅读(50) 评论(0) 推荐(0)
摘要:AtCoder Beginner Contest 374 (A-E) 比赛链接 A - Takahashi san 2 #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ string 阅读全文
posted @ 2024-10-16 11:34 Showball 阅读(22) 评论(0) 推荐(0)
摘要:AtCoder Beginner Contest 373 (A-F) 比赛链接 A - September #include<bits/stdc++.h> using namespace std; using i64=long long; void Showball(){ int ans=0; fo 阅读全文
posted @ 2024-10-11 15:13 Showball 阅读(32) 评论(0) 推荐(0)
摘要:CF 577 B. Modulo Sum 鸽巢原理/01背包 题目链接 思路: 每个数可选可不选,经典的01背包问题,但是数据范围过大,因为要找可行解即可,考虑去找满足题意的子数组(子数组是特殊的子序列)。就变成一个经典的前缀和问题。只需要找到前缀和数组中存在两个相等的值,那么满足条件。由于需要取模 阅读全文
posted @ 2024-10-09 02:36 Showball 阅读(20) 评论(0) 推荐(0)
摘要:CF 1805 D. A Wide, Wide Graph (*1800) 思维 + 树的直径 题目链接 题意: 思路: 若当前点到最远的点的距离 \(< k\) , 说明 \(x\) 自己成为一个联通块。 并且我们知道距离任意一点最远的点一定是树直径的一个端点。 反之,则与直径端点在同一个联通块。 阅读全文
posted @ 2024-10-05 17:59 Showball 阅读(19) 评论(0) 推荐(0)
摘要:Codeforces Round 974 (Div.3) 题解 A. Robin Helps 模拟 按照题意模拟即可。 void Showball(){ int n,k; cin>>n>>k; int cur=0,ans=0; for(int i=0;i<n;i++){ int x; cin>>x; 阅读全文
posted @ 2024-09-24 15:53 Showball 阅读(1023) 评论(1) 推荐(2)
摘要:Codeforces Round 972(Div.2)题解 A. Simple Palindrome 贪心 贪心,尽可能元素数量平均,并且相同字母放在一起。 #include<bits/stdc++.h> using namespace std; #define ff first #define s 阅读全文
posted @ 2024-09-23 16:27 Showball 阅读(151) 评论(0) 推荐(0)