骨牌相关
🥰🥰🥰
今天做了两道骨牌题,感觉有点强,所以来摆了。😼😼😼
首先,骨牌是什么?
我也不知道
在题目里面好像就是一个大小为 的棋子(
有什么性质?
好像涉及骨牌的题还不少,比如说统计棋盘内放 个骨牌的方案数,因为是 的,所以直接状压有哪些位置突出来了就好了,当然也可以轮廓线(
以上均为口胡,不保证正确性😅😅😅
但是我现在不想写这个,这有一个更 👍 的性质:
首先假设你有一个棋盘,上面全部都是骨牌,只有一个空位,现在让你在不拿出骨牌的情况下在棋盘中滑动骨牌。(并且两种局面不同的区分方法是空位位置)
这玩意有什么性质呢,首先发现只有一个空位,所以我们可以把骨牌移动看成空位移动!
现在图就简单很多了,自会有一个会动的了。
那么空位的移动又有什么性质呢?
结论:空位的移动路径构成一颗树。
这是为什么呢?
首先我们将图奇偶黑白染色,发现空位只会在同种颜色中移动。
画个图就会发现这很正确:
显然不管怎么走坐标都是 ,这肯定颜色不变。
现在图里面已经没有奇环了,现在我们要证明他没有偶环。
然后这玩意的证明非常蠢 😥😥😥,就是因为 的骨牌加上一个空位是奇数个位置,不可能有偶环(
现在就证明了这是一颗树了,这就很 🐂(这是牛) 了,很多问题就可以很简单的做出来了。
洛谷 P4701 粘骨牌
这玩意知道了上面的基本就是板子,首先将空位能到的所有点都 bfs 出来,然后考虑一个蠢到不能再蠢的树形 d(dáo)p:
设 表示 节点不能到任何特殊位置的最小代价, 为粘住 节点所在骨牌的代价,转移也很蠢:
这样我们就把这个题做完了!是不是非常简单 😸😸😸
code:
1 |
|
CF1368G Shifting Dominoes
这个题就比上面那个题有意思多了。
首先还是建出上面说的那个树。(其实这里是森林,因为每个骨牌都有可能是起点 😆😆😆)
然后能发现我们这此建的树是单向边,不能走上去。
这里显然在拿掉绿色骨牌后 是走不到 的。
所以我们把树建出来后,答案就是两个骨牌在树上的子树大小乘起来的和!
吗?……
好像寄了 🤡👈🤣
为什么寄了呢?
刚才我们没有考虑两个空位路径的相交 🍌 问题,这显然是不能香蕉的。
首先竖着是没有事的:
但是横着好像寄了:
我们把红色骨牌拿走,然后按着箭头让他走就香蕉了 😣😣😣
不过我们现在先不管这个,这个一会自然就解决了。
根据刚才那个相交的启发(刚才那个其实等于直接拿掉黄色骨牌),现在有了一个更为致命的问题,我们算重了!
这样一个简单的情况我们就会寄,有我们会算出有 中情况:(黑色为边界)
我们得想办法去重。
发现我们的答案其实是 ,这玩意是二维的,那我们就把他放到二维上,将树按 序重标号一下,现在我们拿掉一个骨牌可用的点就是一个矩形了,现在就是要求矩形面积并。
这玩意直接扫描线就好了,灰常简单! 😛😛😛
哦对,上面还有那个重复的没说,你发现你将路径上相交的部分拿出来,他一定有一个完整骨牌,而且这个骨牌一定可以合法的走出上面那个不合法的情况,所以直接不用考虑了(比如上面那个就是直接拿掉黄色骨牌) 😄😄😄
code:
1 |
|