摘要: Kruskal重构树 前置知识:Kruskal算法, LCA 最近刚学,如有错误欢迎提出。 对图建Kruskal重构树的主要作用:求原图中两个点所在路径上的最长边的最小值或最短边的最大值。 如何建Kruskal重构树 在Kruskal的基础上,当两个点x, y 不再一个并查集中,那么我们就再引入一个 阅读全文
posted @ 2020-09-27 17:17 A_sc 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 有关MST的两道题 紧急更新:下面两类题不是说一定和MST有关,只是第一类要从大到小贪心处理边,第二类从小到大贪心处理边,直到图联通。好像和MST思想一样。我废话了。 第一道题:旅行(牛客) 第二道题:Maximum Distance(cf) 在第一题中:一条 u 到 v 的路径的 $cost(u, 阅读全文
posted @ 2020-09-15 20:26 A_sc 阅读(144) 评论(0) 推荐(0) 编辑
摘要: DSU on tree 树上启发式合并 自为风月马前卒dalao的博客 首先介绍一下大概流程: 首先处理所有轻链。 如果有重链,再处理重链。注意重链的值不删除。 这样只需要把轻链的贡献算一下加上就好了,不需要处理重链。 最后,如果是轻链,就要删除其对贡献的影响。 void dfs(int u, in 阅读全文
posted @ 2020-09-14 21:55 A_sc 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 2-SAT #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<queue> #include<vector> #includ 阅读全文
posted @ 2020-09-14 00:58 A_sc 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 参考博客 补题链接 这个题太妙啦。2-SAT和两个状态有关,但是显然如果考虑门的开和关那基本没什么思路,因为两个门基本相互独立。但是如果考虑🔑的使用(1)还是不使用(0)两个状态会发现,两个🔑直接还是有一些相互限制的要求的。比如本题要所以门都变成1,且每个门有两个🔑,所以如果原来门是1的那么它 阅读全文
posted @ 2020-09-13 20:05 A_sc 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 先用Dijkstra计算出1到i的最短路d[i]。再dfs时如果 d[u] + w == d[v] 时就一直继续向下搜索。这些边都可以保留 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #inclu 阅读全文
posted @ 2020-09-09 19:11 A_sc 阅读(115) 评论(0) 推荐(0) 编辑
摘要: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<queue> #include<vector> #include<stri 阅读全文
posted @ 2020-09-07 22:10 A_sc 阅读(95) 评论(0) 推荐(0) 编辑
摘要: //推荐博客// // 2-SAT模板题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<queue> #include< 阅读全文
posted @ 2020-09-07 21:42 A_sc 阅读(47) 评论(0) 推荐(0) 编辑
摘要: 让标签带偏了。。所有点和最小的点连边,算上m个特殊边跑MST就行了。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<qu 阅读全文
posted @ 2020-09-07 19:53 A_sc 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 161D. Distance in Tree (树形DP) Distance in Tree 题意:给一棵树,找两点距离为K的节点对个数 题解: \(dp[i][j]\) 表示 i 节点子树距离 i 为 k 的节点个数。DP转移为: \[ dp[u][0] = 1 \\ dp[u][j] = \su 阅读全文
posted @ 2020-09-06 21:34 A_sc 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 这道题也是看博客研究了1天。 参考博客 题意: 有n个士兵,第i个士兵只能参与大小在 \(l_{i}\) 到 \(r_{i}\) 的集合的构建。同时有m对仇恨关系,求构建无仇恨关系的集合数量。 题解: 用num[i]表示 可以参与组成大小为 i 的集合的士兵个数 首先如果不考虑任何限制,那么每个大小 阅读全文
posted @ 2020-08-28 15:54 A_sc 阅读(207) 评论(1) 推荐(0) 编辑
摘要: Codeforces E94 F. x-prime Substrings (AC自动机 + dp) 参考博客 题意: 给一个字符串s (仅由数字1~9构成) 和数x. 令$f(l,r) $ 表示 字符串l 到 r 位的数之和。同时定义 x-prime 为$f(l_{1}, r_{1}) = x$ 且 阅读全文
posted @ 2020-08-27 23:29 A_sc 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 调了1天,居然是我的AC自动机板子有问题。。。 这个板子是真的繁琐 8/27/21:16 已更新简洁版本 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #includ 阅读全文
posted @ 2020-08-27 16:19 A_sc 阅读(96) 评论(0) 推荐(0) 编辑
摘要: //2020/8/24/21:07 #include <cstdio> #include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <vector> # 阅读全文
posted @ 2020-08-24 21:08 A_sc 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 基环树 / 环套树 参考资料: oi-wiki图论相关概念 岛屿题解 基环树 最近开始学基环树,思路不是很难但是实现有点难复杂,很考验基础能力。 什么是基环树: 如果一张无向连通图包含恰好一个环,则称它是一棵 基环树 。 如果一张有向弱连通图每个点的入度都为 1,则称它是一棵 基环外向树 。 如果一 阅读全文
posted @ 2020-08-24 16:29 A_sc 阅读(919) 评论(0) 推荐(0) 编辑
摘要: ** 注意sort时不要取模!!!!!** #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<queue> #include 阅读全文
posted @ 2020-08-24 14:40 A_sc 阅读(99) 评论(0) 推荐(0) 编辑
摘要: Codeforces Round #568 (Div. 2) D - Extra Element 补题地址 这道题题的突破口就在这个"去掉一个值", 这说明你除了去掉的点其他点排序后相邻距离d是一样的。所以我们直接考虑这个d是多少,然后看能不能去掉一个点达到要求。显然不能枚举d,但是由于只去掉1个点 阅读全文
posted @ 2020-08-21 17:35 A_sc 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 2020牛客暑期多校(七) C - A National Pandemic(树链剖分) 参考博客 题意: 一棵树支持3种操作: 1 x w, 给x点加w,其它点y加 \(w-dist(x, y)\). 2 x, 将x权值变为$min(0, f(x)) $; 3 x, 查询x的权值$f(x)$ 分析: 阅读全文
posted @ 2020-08-19 20:37 A_sc 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 树链剖分练习题 洛谷补题链接 P3038 USACO11DEC]Grass Planting G /* 2020/8/17/8:34 树链剖分:含点权转边权处理。 */ #include<bits/stdc++.h> using namespace std; #define rep(i, a, n) 阅读全文
posted @ 2020-08-19 11:30 A_sc 阅读(180) 评论(0) 推荐(0) 编辑
摘要: P4315 月下毛景树 补题地址 这是一道树剖~~(线段树)~~好题 。思路就是树链剖分,然后线段树维护最值。 这道题麻烦在两点: 边权转点权 区间加 + 区间覆盖的 lazy 标记处理 (要强调本线段树维护最值) 首先边权转点权处理,其实如果做过 P3038 那边权转点权并不是什么大问题,只要把点 阅读全文
posted @ 2020-08-17 20:27 A_sc 阅读(83) 评论(0) 推荐(0) 编辑
摘要: #include<bits/stdc++.h> using namespace std; #define rep(i, a, n) for(int i = a; i <= n; ++ i); #define per(i, a, n) for(int i = n; i >= a; -- i); typ 阅读全文
posted @ 2020-08-15 21:32 A_sc 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 2020暑假牛客多校9 B - Groundhog and Apple Tree (树形dp) 补题链接 参考博客 题目大意: 给一个树,走每条边会减hp, 走到点会加hp,原地等待也会加hp, 问最少原地等待时间使得能够遍历所有点。每条边最多走两次。 题解: 首先每条边最多走两次那也就dfs一遍树 阅读全文
posted @ 2020-08-15 13:20 A_sc 阅读(194) 评论(0) 推荐(0) 编辑
摘要: C Decrement on the Tree 参考博客 题目: 一棵树每次选择一条路径将路径上的边权都减1,问最少多少次操作后所有边权变成0。 题解: 看了好几篇博客才明白了,这道题的做法是将对边权的处理转变成去想对点的处理,算各点的贡献。之所以可以这样做是基于给一条边的边权-1,相当于访问这条边 阅读全文
posted @ 2020-08-14 15:53 A_sc 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 参考博客 题意: 给你一个图G,问补图上s到其他n-1个点的最短路。 题解: bfs + set。每次把u点不相连的点入队列,取更新。具体见代码。 #include<bits/stdc++.h> using namespace std; #define rep(i, a, n) for(int i 阅读全文
posted @ 2020-08-14 12:26 A_sc 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 题目链接 题目: 给你两个数组a[], b[],对第一个数组你可以选择任意一个区间[l,r]进行从小到大排序。问能不能将a数组经过多次操作变成b数组。 题解: 首先,我们能发现一个数要向前移动,只能前面的数比它大时才可以向前移。所以要想把a变成b相当于用a中的数构造b,扫一遍b对每一位b[i],在a 阅读全文
posted @ 2020-08-14 10:27 A_sc 阅读(74) 评论(0) 推荐(0) 编辑
摘要: HDU6865 杭电多校8 1011-Kidnapper's Matching Problem (线性基+KMP) 题意: 题意就是计算这个式子,[condition] 当$a_ ... a_{i+m-1}​$ 与b数组满足匹配关系时为1。具体匹配关系指$a_ \oplus b_ \in 2^{⊕} 阅读全文
posted @ 2020-08-13 20:43 A_sc 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 模拟vim (雾 用两个栈s1, s2去模拟,s2的top位置就是光标。这样无论删除还是添加都很方便 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include< 阅读全文
posted @ 2020-08-12 15:56 A_sc 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 公式:\(f(n+2)-f(1)\) 但是本题求的是前n+1项的和,所以计算f(n+3)-f(1) 做法:矩阵乘法 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #i 阅读全文
posted @ 2020-08-12 14:45 A_sc 阅读(876) 评论(0) 推荐(0) 编辑
摘要: 暑假补题记录 dx1 [ ] A:后缀数组,结论题 [ ] B: [ ] C [ ] D [ ] E [x] F:签到 [ ] G [x] H:最小费用流 [x] I::最大流(, 带花树匹配 [x] J:数论公式 dx2 [ ] A [ ] B [x] C [x] D [ ] E [ ] F [ 阅读全文
posted @ 2020-08-12 10:36 A_sc 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 判断 \(\prod_{i=1}^{n}a[i]! == \prod_{i=1}^{m}b[i]!\) 做法:找两个模数,算一下比较一下就好了。如果上式相等那计算取模也一定相等。 #include<iostream> #include<cstdio> #include<cstring> #inclu 阅读全文
posted @ 2020-08-12 10:28 A_sc 阅读(170) 评论(0) 推荐(0) 编辑