题解:P13537 [IOI 2025] 世界地图(worldmap)
zhoukangyang · · 题解
来我的博客里看
题意
给定
n 个点m 条边的无向联通图。你需要构造一个K\times K 的网格,并在每个网格点上标上一个点的标号,使得一条边(u,v) 在图中出现当且仅当网格中存在相邻的两个点,编号分别为u 和v 。数据范围:
n\le 40 。要求
K\leq \color{red}{1.5n} 。
题解
我们先来看原题的
首先,找到图的一颗 DFS 树,并根据颗树的 DFS 序斜着放,像这样:
1232
2324
3242
2421
考虑在这样的图中加入其他非树边。对于每个点的最后一次访问,我们把其拓展为
1d1
1c1
1b1
a1
1
可以发现,这条斜线的位置到斜线序列开头和末尾的长度都至少是其到祖先的深度,因此总是能够在中间夹住所有要连的点。这样需要
然而,这样构建夹层非常浪费,考虑优化。
我们发现我们可以同时处理两个点对应的出边,我们处理了
1f12
1e12
1112
11d2
12c2
2b2
a2
可以发现,夹层大小大约是
考虑在树上对相邻的一些点做匹配,然后对这些匹配做上面的连边优化。从根开始从上到下匹配,每次将一个没匹配的非叶子向其最后一个儿子匹配。这样会连成一些匹配,并剩下一些叶子。
由于这些叶子不会相互连边,因此我们只需要将叶子向祖先连出去的那些边放在祖先处处理,我们不对他们建立夹层。
然后,对于每个向儿子匹配的点
夹层前面有这么多点是显然的,因为这些点都出现在了夹层的前面;而夹层后面只出现过
这样我们需要用
aclink