CF2098C 解题报告

题目概述

在一个 \(n*m\) 的平面上,有一条通过四连通形成的长 \(2k+1\) 的路径。现在给出所有奇数位置的坐标,求可能的路径数量。

赛时分析

首先考虑最简单的情况:两个编号相邻的点,如果可行,那么它们的曼哈顿距离一定为 \(2\)。在此基础上,如果它们的横(纵)坐标相同,那么显然就一种方案;如果它们的横纵坐标都不相同,那么就有两种情况。

所以答案一定是 \(2\) 的若干次方?

但是很快,我们发现,如果存在像 \((1,2) \rightarrow (2,3) \rightarrow (3,2)\) 这样的坐标序列,那么这三个点一共只有 \(3\) 种方案,这便使我们刚刚”感性“理解得出结论推翻了。再次观察,我们发现这类不符合上述规律的点集,它们之所以会不满足条件,是因为其中一个点本来可以任意选取的空点被其他点占用了。

因此我们考虑,如果两个斜相邻的点,将它们可以选用的空点合并到一个并查集中,那么上述点集的空点一定在同一个并查集中。暴力枚举每一个点集,用搜索遍历每一种可能空点分配方案,最后所有点集分配方案的乘积就是答案。

但是遗憾 \(\text{WA}\)

题解

其实已经接近了。

Trick:将斜相邻的点可以选用的空点之间连边,然后给边定向(由不选的指向被选的),需要保证每一个点只有一条入边

很巧妙的方法!

接下来是分类讨论:

对于一个大小为 \(sz\) 的连通块:

  • 如果该连通块中有超过 \(sz\) 条边,那么该情况无解(抽屉原理);

  • 如果该连通块构成了一个首尾相连的环,那么该连通块对答案的贡献为 \(2\)(显然,我们有顺时针和逆时针两种定向方案);

  • 在不满足上一点的前提下,如果该连通块构成了一棵环基树,那么该连通块对答案的贡献为 \(1\) (它只能由环向外,不然在链和环合并的节点的入度就不为 \(1\) 了);

  • 如果该连通块是一棵树,那么它对答案的贡献是 \(sz\) (以任意一点为根,深度小的节点指向深度大的节点,都是一种方案);

所有连通块的贡献相乘即可。

posted @ 2025-07-14 14:59  XiaoZi_qwq  阅读(9)  评论(0)    收藏  举报