Processing math: 100%

很妙的一道计数题

思路

首先可以明确如果枚举每种连边情况 暴力计算连通块时间复杂度是不可接受的
(题目中%1e9+7 不就表明了这一点)

因此考虑计算每一种连通块的总出现次数 即对答案的贡献
(“因此” 好难想)

性质:

  • 如果设 (l1,r1),(l2,r2)分别为两条连边且 l1<r1,l2<r2

l1<=l2<r2<=r2则两条直线必不相交 l1<r1<=l1<=r2时也必不相交

那么仅有交叉关系时相交 因此 给定一条线段的两个端点 我们能判定他们的相交关系

  • 我们来分析连通块

此时 l1,l2,r1,r2同属一个连通块

此时 l1,l2,r1,r2同属一个连通块而 l3,r3属于另一个连通块

同时两个连通块不同当且仅当至少有一个点出现在其中一块中而不存在另一块中

因此一个连通块最左的点和最右的点可以表示一个连通块

用人话说就是

l1,r1为连通块 A 最左侧和右侧的点;

l2,r2为连通块 B 最左侧和右侧的点

l1l2r1r2则连通块 AB

从性质出发的做法

fi,j表示以 i,j为左右端点的连通块的贡献次数

显然只要区间 i,j里头的东西不要往区间外连 那么随意连都是合法的

cnti,j表示 (i,j)里还有多少点可以随意连

gi表示 i个点的连线总方案

即有 fi,j=gcnti,jfi,kgcntk+1,j

然后 O(n3)搞定(

分类: 文章

3 条评论

Qiuly · 2021年10月31日 8:34 下午

图是不是挂了 /kk

    Hencecho · 2021年11月2日 3:28 下午

    好像是的()
    洛谷图床容易出锅/kk

      Qiuly · 2021年11月9日 6:55 下午

      还是看不了 /kk

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注