codeforces 乱做题记录

Codeforces 590 E

https://codeforces.com/problemset/problem/590/E

给 $ n $ 个只包含字符 $ a $ 和 $ b $ 的字符串,总长度不超过 $ 10^7 $,选出最多的字符串,使得其中不存在字符串 $ a $ 和 $ b $ 满足 $ a $ 是 $ b $ 的子串,输出方案,如果有多种方案,输出任意一种

$ n \le 750 $

我们需要对每个串求出所有的比它短的是它的子串的字符串,并向其连边,可以发现这 $ n $ 个点形成了若干个 DAG

对所有字符串建出 AC 自动机,每个节点记录一个 $ id $,表示当前节点的子串中是 $ n $ 个字符串中的最长的一个字符串的下标,再对每个串求出比它短的是它的子串的字符串,进行 floyd 传递闭包使得所有的不能放在一起的字符串均被求出

这个方法很巧妙,求出了每个节点在 DAG 上的后继再进行传递闭包,防止了匹配过程中跳 $ fail $ 指针次数过多,同时保证了正确性

如果把所有的边看成无向边,我们要求的就是这张图的最大独立集,直接做是指数级的,这个时候我们引入一些东西

偏序集:给定集合 $ S $ ,$ \le $ 是 $ S $ 上的二元关系,$ \le $ 要满足

  • 自反性:$ \forall a \subseteq S $ 有 $ a \le a $
  • 反对称性:$ \forall a, b \subseteq S, a \le b $ 且 $ b \le a $ 则 $ a = b $
  • 传递性:$ \forall a, b, c \subseteq S, a \le b $ 且 $ b \le c $ 则 $ a \le c $

则称 $ \le $ 为 $ S $ 上的偏序关系,$ (S, \le) $ 是偏序集

可以发现偏序集形成若干 DAG,DAG 也可以形成偏序集

全序集:设 $ (S, \le) $ 是偏序集,如果 $ \forall a, b \subseteq S $ , $ a \le b $ 和 $ b \le a $ 中至少有一个成立,则称 $ \le $ 为序关系,$ (S, \le) $ 是全序集

可以发现全序集形成一个 DAG,而且是一个团

以下的偏序关系均为 $ \le $

链:全序集

反链:设 $ S $ 是偏序集,如果 $ \forall a, b \subseteq S $ , $ a $ 和 $ b $ 无法比较,则称 $ S $ 为反链

可以发现题目要求的就是最大反链的元素个数

Dilworth 定理:偏序集能划分成的最少的全序集的个数与最大反链的元素个数相等

偏序集能划分成的最少的全序集的个数,又因为每一个全序集都是链,所以题目转换为了 DAG 上的最小路径可重复点覆盖

DAG 上的最小路径可重复点覆盖需要传递闭包绕点 ( 具体可看这篇博客 ),我们最开始已经传递过闭包了,所以并不需要再做一次

然而这题还需要输出方案

考虑一下我们传递闭包后,每一条路径的开头的那个点,它和这条路径中的所有点都有偏序关系 ( $ \forall p \le p_1 $ )

我们把这些点放在一起,就形成了一条反链(如果不是反链,根据传递性,一定有两条路径可以合并成一条

所以我们把开头的这个点提出来(在算法中是二分图匹配里未被匹配的点)输出即可

原文地址:https://www.cnblogs.com/LJC00118/p/10807261.html

时间: 2024-10-13 23:33:49

codeforces 乱做题记录的相关文章

codeforces edu76 做题记录

A. 随便判一下,注意边界 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 int T; 5 int n,x,a,b; 6 int main() 7 { 8 cin>>T; 9 while(T--) 10 { 11 cin>>n>>x>>a>>b; 12 if(a>b)swap(a,b); 13 int ans=b-a; 14 a

【BZOJ做题记录】07.07~?

在NOI一周前重开一个坑 最后更新时间:7.07 11:26 7.06 下午做的几道CQOI题: BZOJ1257: [CQOI2007]余数之和sum:把k mod i写成k-k/i*i然后分段求后面的部分就好了 BZOJ1258: [CQOI2007]三角形tri:在草稿纸上按照位置和边找一下规律就好了 BZOJ1260: [CQOI2007]涂色paint:简单的区间DP BZOJ1303: [CQOI2009]中位数图:小于中位数的改为-1大于的改为1,算一算前缀和然后哈希一下乘一乘就好

project euler做题记录

ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{array}{c} S(n) & = & \sum_{i = 1} ^ n \sum_{p = 1} ^ i \sum_{q = p + 1} ^ i \frac {1}{pq}[p + q \geq i][gcd(p, q) = 1] \& = & \sum_{i = 1} ^

退役前的做题记录5.0

退役前的做题记录5.0 出于某种原因新开了一篇. [CodeChef]Querying on a Grid 对序列建立分治结构,每次处理\((l,mid,r)\)时,以\(mid\)为源点建立最短路树,这样跨越\(mid\)的点对之间的最短路一定会经过\(mid\),因此两点之间的最短路径就可以描述成最短路树上的两段到根路径.对每棵最短路树处理\(dfs\)序,用树状数组维护权值修改即可. [Wannafly挑战赛4F]线路规划 类似SCOI2016萌萌哒一题,并查集\(f_{i,j}\)表示从

后缀自动机做题记录

目录 后缀自动机做题记录 sp1811 sp1812 sp10570 luogu 2463 CF873F TJOI2015 弦论 AHOI2013 差异 HEOI2016/TJOI2016 字符串 HAOI2016 找相同字符 SDOI2016 生成魔咒 ZJOI2015 诸神眷顾的幻想乡 留坑待填 广义SAM 其他 NOI原题练习 后缀自动机做题记录 来填之前的坑了...考后大概会做做有字符串的综合题吧 sp1811 lcs板子,对于第一个串建出SAM,第二个串在上面跑,即可求出对于每一个位置

清华集训2014 做题记录

清华集训2014做题记录 已完成 [清华集训2014]玛里苟斯 [清华集训2014]主旋律 [清华集训2014]奇数国 [清华集训2014]矩阵变换 [清华集训2014]sum [清华集训2014]虫逢 [清华集训2014]玄学 [清华集训2014]文学 未完成 [清华集训2014]卡常数 [清华集训2014]简单回路 [清华集训2014]Router [清华集训2014] Breaking Bomber 写一题要膜一题题解,膜完题解膜代码,膜完代码膜指导,膜了好几天了还有四个题没做. [清华集

2020年3月做题记录

[不定时更新,赶论文,赶项目,1月~2月做题记录还在整理,自我训练] 反转链表 链接:https://leetcode-cn.com/problems/reverse-linked-list/ 类名: 考察点:链表.迭代.递归 解题过程: 力扣3月每日1题,题解链接: https://leetcode-cn.com/problems/reverse-linked-list/solution/di-2ci-da-qia-lian-biao-fan-zhuan-di-gui-by-wu-xi-/ 就

Educational Codeforces Round 79做题记录

这套题感觉出的不咋滴,第四题和第五题难度差了1000分!!! 前四题都还简单,第五题就31人做出……我算了…… 懒得写题解了,做个记录吧(这就是偷懒的理由???) 比赛传送门 A.New Year Garland 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <vector> 6 #define re

2020年3月底到4月第1周做题记录(力扣)

写在前面的话: 多看书,整完论文,deadline驱动,加油. 做题时间: 2020年3月30日~2020年4月5日 记录: 总共道题,时间为min. 最近更新时间: 202003230 圆圈中最后剩下的数字 链接: https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/ 类名: 考察点: 环.模拟 解题过程:力扣3月每日1题 题目的意思是用n个数字形成一个圆圈,数字范围为0到n-1,数