摘要: 对于一棵树上三个点 \(p, q, i\) 存在 \(dis(p, q) \leq dis(p, i) + dis(i, q)\) 等号成立条件: 当且仅当 \(i\) 位于 \(p, q\) 的路径上。 阅读全文
posted @ 2021-11-15 21:25 牛蛙丶丶 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 最短哈密尔顿路径 P4802 [CCO 2015]路短最 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; int n, m, w[19][19], f[1 << 19][19]; int m 阅读全文
posted @ 2021-10-14 16:16 牛蛙丶丶 阅读(19) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2021-10-07 20:44 牛蛙丶丶 阅读(0) 评论(0) 推荐(0) 编辑
摘要: #include <cstdio> #include <cmath> #include <queue> #include <iostream> #include <algorithm> //一条路可以重复走多次 using namespace std; const int N = 200070, i 阅读全文
posted @ 2021-10-03 22:08 牛蛙丶丶 阅读(34) 评论(0) 推荐(0) 编辑
摘要: T1: 阅读全文
posted @ 2020-11-17 17:06 牛蛙丶丶 阅读(51) 评论(0) 推荐(0) 编辑
该文被密码保护。 阅读全文
posted @ 2020-11-15 10:53 牛蛙丶丶 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 随时会更新 阅读全文
posted @ 2020-11-13 14:20 牛蛙丶丶 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 随时会更新 P4408 根据题意可以发现构成的图是一棵树。 然后可以发现行走路径是从 C 到距离较近的 A 或 B 点,再走完 A-B 路径,所以对于 A-B 路径,其长度与 C 的位置是无关的,所以他有一个固定的上限,在根据树的直径的性质,可以将其 A-B 确定为树的直径,之后我们要做的就是处理出 阅读全文
posted @ 2020-11-11 17:02 牛蛙丶丶 阅读(101) 评论(1) 推荐(1) 编辑
摘要: dsu on tree 练习题 首先,因为是以 a 为根的子树内深度为b的节点上的字母重新排列之后是否能构成回文串,要排列后成为回文串,所以在符合条件的所有字母之中必须至多只有一种字母的数量为奇数种。 然后,就是基本的 dsu on tree 的操作了,先将所有的询问以离线的方式存储下来,这样子做可 阅读全文
posted @ 2020-11-09 11:29 牛蛙丶丶 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 2-pointer 练习题 根据题意,为了创造连续排列的一段相同类型的牛,我们可以去除掉队列里 k 种血统的奶牛,所以我们的排列里最多只能有 k+1 种奶牛,所以我们可以用两个指针进行扫描,用一个 map 来记录每个类型的数量,将右指针向右移动,并将没有出现过的类型累加到答案之中,当序列中有 k+2 阅读全文
posted @ 2020-11-09 11:27 牛蛙丶丶 阅读(71) 评论(0) 推荐(0) 编辑