A-E 的题解应该 trq 都会写掉,我感觉 F 特别好玩所以专门写了 F 的题解。
CODEFORCES ROUND 1080 (DIV. 3) F 题解
谁懂作为一个只懂一点图论皮毛其它一窍不通的人来说,发现具备传递性后首先想到了建图的救赎感。
题目分析
这题其实大可以分为两部分做,一部分数学,一部分图论,两者似乎并不相干。说句闲话,我并不是很理解为何出题人要把数学性这么强的东西放在一道 OI 题里,也没有做一个特殊说明,或许是因为出题人觉得二次函数太简单了大家都会(?)
PART.1 数学
首先我们要考虑怎么从代数的角度去判断两个二次函数有没有交点。
> 对于两个二次函数 f(x)=a1x2+b1x+c1,g(x)=a2x2+b2x+c2f(x)=a_1x^2+b_1x+c_1,g(x)=a_2x^2+b_2x+c_2f(x)=a1 x2+b1 x+c1 ,g(x)=a2 x2+b2 x+c2 ,若函数 h(x)=(a1−a2)x2+(b1−b2)x+(c1−c2)h(x)=(a_1-a_2)x^2+(b_1-b_2)x+(c_1-c_2)h(x)=(a1 −a2 )x2+(b1 −b2 )x+(c1 −c2 ) 无实根,则两个二次函数无交点。
> 这个其实很好想。
两个二次函数存在交点意味着必然存在一个实数 xxx,使得 f(x)=g(x)f(x)=g(x)f(x)=g(x),移项一下,就可以得到 (a1−a2)x2+(b1−b2)x+(c1−c2)=0(a_1-a_2)x^2+(b_1-b_2)x+(c_1-c_2)=0(a1 −a2 )x2+(b1 −b2 )x+(c1 −c2 )=0,也就是只要这个方程有实根,两个二次函数就存在交点。
反之可得无交点的情况。
::::
知道两个函数无交点后还要再想到一个性质(似乎不能说是性质),就是两个函数既然无交点,就必然存在严格大于/严格小于的关系。
这个真的很好证,读者完全可以自己思考。
这么看感觉数学部分也不是很难。
PART.2 图论
既然有严格大于/严格小于的关系,那就可以建图了。我们对所有严格大于的关系建一条有向边,很显然这个是具备传递性的,且建出的图一定是一张 DAG。
建好之后,试想如果我们从图中任意挑出一个链(假设上面的元素分别是 f1,f2,…,fkf_1,f_2,\dots,f_kf1 ,f2 ,…,fk ),它们必然是“有序”(我不确定大家的翻译给的是不是这个,原文是 organized),因为链中的所有元素都保持着严格大于的关系,都不可能存在交点。
然后就很简单了,对于每一个 iii,我们只需要找出经过它的最长链的长度即可。
我一直以为这个应该有一个原题的,但找了 5min 没找到。唯一最像的就是 P1137。P1137 是以该点为终点的最长路径长度,而我们要求的是经过该点的最长链长度,也就是分别以该点为起点,终点的最长路径长度和减一(减去自身重复)。
终点会求了起点建一个反图也可以求。
一些坑点
1. 判断两个函数有无交点时,算出 hhh 函数解析式后不可以直接代 Δ\DeltaΔ 判别式,一定要先讨论二次项系数。
2. 不可以直接用并查集来维护两个函数是否有交点,因为这个并不具备传递性。
3. 多测要清空。
CODE