09 2022 档案
摘要:突然意识到正式赛这个版块没有更新过什么,就打算写一个赛后总结 开场跟榜开 ,跟队友讨论了好一会儿, 分钟才意识到和叶子结点有关,qgn 上机,没看代码,觉得没啥问题,结果有特判 没想到,小 一发 接着开了 , 其实我一早就看到这个题了,就是最近不太喜欢读题,看到
阅读全文
摘要:Getting Confidence 费用流 经典费用流模型,先建立 个点,来模拟一行,一行中的连接边流量为 ,费用为 ,源点连接每一行的第一个点 对上述生成的点中,同一列连接到一个新的点,流量为 ,费用为 ,然后该点连接一个流量为 ,费用
阅读全文
摘要:最近真的被很多事情烦死了,实习难,就业难,考研难,还不知道大四要不要继续打好(现在热情已经损耗的差不多了,想退役了),队友又摆烂(等退役小文章再吐槽),学校课程又乱七八糟(实验课什么入门都没有直接就地狱模式,那老师啥都不讲) 今天的烦躁居然连喝奶茶都压制不下去了,要是十年前的我知道现在是这么一个焦虑
阅读全文
摘要:Denouncing Mafia 贪心 + 线段树 + 序 || 贪心 + 长链剖分 考虑贪心地每次拿能染色最多的点,每拿走一个点,都会影响其他点的值,如果一个点被染色,则他子树的所有点的贡献值都会 - 1,因此考虑用线段树 + 序的方式,对树上进行区间修改,每次询问所有点的
阅读全文
摘要:Tree Requests 判断 的子树中,深度为 的结点上所带有的字符,能否组成一个回文串 启发式合并 维护所有深度上不同字符的数量,并且维护其奇数字符出现的次数 如果若干个字符能组成一个回文串,必然有: 偶数个字符,且不出现奇数次数的字符 奇数个字符,只能出现一个奇数次数
阅读全文
摘要:Tree and Queries 询问 的子树中,有多少种颜色出现了 次 启发式合并 最直接的,树上启发式合并的同时维护颜色出现的次数,然后再拿一个数组记录一下出现了 次的颜色数量,储存在 对于这个 的维护,一开始觉得直接套个树状数组上去,
阅读全文
摘要:Blood Cousins Return 启发式合并 在跑启发式合并的同时,对每个深度都维护一个 ,就可以自动去重并计算有多少种不同的字符串 #include <iostream> #include <cstdio> #include <algorithm> #include <vecto
阅读全文
摘要:Blood Cousins 树上启发式合并 || 序 + 二分 树上启发式合并就直接根据深度来合并起来就好了,答案就是问的那个点的 级祖先下,深度与问的那个点的儿子数量 - 1 对深度进行一个启发式合并就好了 好像还可以长链剖分? 注意该题是森林 #include <iostre
阅读全文
摘要:Unique Username 模拟 搜索 全排列模拟,直接搜索 #include <iostream> #include <cstdio> #include <map> #include <string> using namespace std; const int maxn = 20; map<
阅读全文
摘要:Best Concatenation 贪心 - 相邻交换 考虑两个相邻位置的元素,如果进行交换,会对答案造成怎样的影响 假设现有一个排列,我们拿出其中两个相邻项 和 考虑 和 的顺序对答案造成了什么影响
阅读全文
摘要:Exactly K Steps 树的直径 + 离线 考虑离每个点最远的点是哪个点,根据树的直径相关内容,距离该点最远的点一定是直径两个端点之一,理解上的话可以考虑画一个图,直径上的所有点在一条直线上,然后再花分支,如果其中一个点的最远距离的点,不是直径上两个端点的话,显然会有新的更长的直径产生 因为
阅读全文
摘要:Erasing Vertices 2 二分 || 贪心 二分的做法就二分答案,然后检查一下能否删除,像拓扑一下跑一下就行 #include <iostream> #include <cstdio> #include <algorithm> #include <vector> #include <qu
阅读全文
摘要:Madoka and The Corruption Scheme 组合数 + 思维 + 贪心 首先要思考一开始要如何摆放才是最优秀的 按照完全二叉树(根就是最后赢的那个),给所有的点赋予权值,代表需要转换多少条边,才能使得这个点的数字被选上 显然假设当前点的权值为 ,该点的其中一个节点权值必然
阅读全文
摘要:Madoka and Formal Statement 思维 如果合法,说明 ,因此也可以认为 就是 最后能变成的最大值 根据题意操作,只有 的情况,才能使 ,因此 的理论最大值应该是
阅读全文
摘要:Madoka and Underground Competitions 构造 在一行里,如果选定了其中一个位置是 ,接下来就直接往左和往右每 个放置一个 就行了 每一行的初始位置根据一开始的那个 ,斜着一个方向铺满,即可做到每一行都存在一个 | . | X | .
阅读全文
摘要:Madoka and Strange Thoughts 唯一分解定理 $$ lcm(a, b) = p_1^{max(ak_1, bk_1)} * p_2^{max(
阅读全文
摘要:Maximum AND 贪心 从高位开始,尽可能地让 中该位为 的 和 中该位为 的配对在一起,换句话说,可以让 由小到大排序, 由大到小排序 如果当前位最终是 ,则继续该过程 如果当前位最终是 ,则说明失配,考虑将这一位全部置为 (
阅读全文
摘要:Plus and AND 贪心 从高位开始逐位枚举,如果当前位能够在 的代价内将所有数字都变成 ,则认为结果的当前位是 ,如果凑这一位利用了低位的 ,则要将其全部置为 重复这个过程 #include <iostream> #include <cstdio> #inc
阅读全文
摘要:【模板】边双连通分量 边双的数量 tarjan 割边 出现一个桥就会把分割出一个连通块,因此边双的数量就是 桥的数量 + 原本块的数量 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; co
阅读全文
摘要:Hedge Mazes 判断两点之间是不是只有唯一一条简单路径 tarjan 割边 如果两点之间仅有一条简单路径,说明如果将路径上的一条边割掉,则两点之间不连通,换句话说,这条最短路径上的所有边都是割边 因此考虑找出所有的割边,用割边来跑一次并查集 #include <iostream> #incl
阅读全文
摘要:Caocao's Bridges tarjan 割边 直接跑权值最小割点 坑: 如果图本身不连通,则输出 如果图连通,且最小割边为 ,应该输出 (至少有一个人去炸) #include <iostream> #include <cstdio> #include <algorithm
阅读全文