摘要:
求出 fuf_ufu 表示 111 到 uuu 的最少翻转次数,这一部分容易使用最短路处理。具体来说可以把每个状态拆成 gu,0/1g_{u,0/1}gu,0/1 表示 111 到 uuu,目前翻转次数为偶数或者奇数的最少翻转次数,跑最短路即可。 然后考虑每个点 uuu 在最终最短路下的翻转次数 阅读全文
摘要:
考虑一个三次方做法: 枚举两条横线,求出有多少条竖线和两条横线都相交,假设为 ccc 个,那么对答案有 (c2)\dbinom{c}{2}(2c) 的贡献。复杂度 O(n3)O(n^3)O(n3)。 考虑求出每条横线与每条竖线是否相交,这部分可以 O(n2)O(n^2)O(n2) 求出,那么就可以 阅读全文
摘要:
设 dud_udu 为 uuu 的度数,显然删掉 uuu 后树变成了 dud_udu 个连通块,至少需要 du−1d_u-1du−1 次合并才能变成一个连通块,所以答案下界显然是 du−1d_u-1du−1。 但是下界不一定取得到。注意到这个东西其实是求最小生成树,不妨考虑 Kruskal 阅读全文
摘要:
考虑不妨设每个 (x,y)(x,y)(x,y) 都有 x≤yx \leq yx≤y,容易发现规定顺序没有影响。 考虑 (x1,y1)(x_1,y_1)(x1,y1) 和 (x2,y2)(x_2,y_2)(x2,y2),什么时候可以比较。当且仅当 x1≤x2∧y1≤y2x_1 \leq x_2 阅读全文
摘要:
Tag:二分图匹配,AC 自动机,Dilworth,Konig。 题意:给定 nnn 个互不相同字符串 sis_isi。求最多能保留多少个字符串,使得两两之间互不包含。 范围:n≤750n \leq 750n≤750,∑∣si∣≤107\sum \left| s_i \right| \leq 10 阅读全文
摘要:
离线倒着做,变成连边,以及询问所有连通块直径最大值。 然后是一个经典结论,就是当边权非负时,两个连通块合并,新的直径端点必然是之前两个连通块的四个端点的其中两个,于是你可以使用并查集维护连通块,以及每个连通块的直径端点。合并的时候大力分讨几种即可。 证明: 考虑新的直径,要么在原来的两个连通块内部, 阅读全文
摘要:
题意:给定 nnn 个字符串 sis_isi,每个字符串有权值 viv_ivi。qqq 次询问,每次给定一个字符串 SSS 和一个数 kkk。定义 cnticnt_icnti 为 sis_isi 在 SSS 中出现次数。求 cnti×vicnt_i \times v_icnti×vi 的 阅读全文
摘要:
唐题。 考虑瞎状压,fi,Sf_{i,S}fi,S 表示末尾的字符串是 sis_isi,目前 SSS 这个二进制状态为 111 的位置已经是子串了。转移直接枚举上一个位置哈希。注意要把本身就在另一个字符串的子串中的删掉并去重。 #include <bits/stdc++.h> using nam 阅读全文