标题上所说的偏序集(详见维基百科偏序集或我所转的那篇博文)什么的是今天 qw 告我的,我觉得非常厉害,Orz 一下。。
题目描述
有N个数A1..AN,已知一些它们之间的大小关系,形如某个数不小于某个数。
Your Task
把这N个数分成尽量少个集合,使得每个集合内的任意两个数的大小关系都是未知的。
输入文件
第一行 N M 表示有N个数,M个大小关系。
接下来M行,每行 i j 表示 Ai>=Aj。
输出文件
一行包含一个整数,最少要分成多少个集合。
样例输入
4 4
1 2
1 3
1 4
4 1
样例输出
3
样例解释
2 3在同一个集合,1在一个集合,4在一个集合。
数据约定
20%:N<=18
60%:N<=10000
100%:N<=100000,M<=1000000
这道题考试的时候把 m <= 1000000 看成了 m <= 100000,再加上当时实在是太蠢了,竟然对每个块都拓扑排序了一遍,所以。。。wa 20 。
解法是什么呢?据 qw 所说的偏序集之类,此题明显是求一个偏序集的最小反链覆盖,而最小反链覆盖等于最长链。
先说我