首页 > 其他分享 >Oops, It's Yesterday Once Twice Three times.

Oops, It's Yesterday Once Twice Three times.

时间:2023-02-12 20:00:18浏览次数:57  
标签:DAG 出度 Yesterday 然后 times 一条 Three 出边 起点

严谨一点讲,这叫广义串并联图方法,即:删一度点,缩二度点,叠合重边。

通俗一点讲,叫:把看上去显然的情况做掉答案就出来了

[USACO22OPEN] Hoof and Brain P

按照套路,先考虑没有出边的点,走到这样的点上面就太蠢了,所以一定不会走过来,因此这样的点可以删掉。

然后考虑有一条出边的点,走到这个点上面只会有一种选择,也就是继续走向唯一的出边对应的点,因此这个点也可以缩掉。也就是说直接让有边指向这个点的点指向出边对应的点。

然后后你缩完之后发现你得到了一张每个点至少有两条出边的图,你发现如果一个点不在已经被删掉的节点,并且两个棋子在新的图上不在同一个节点,那么总有办法不走到另一个棋子所在的节点上,因此Hoof必胜了。

其余情况显然必败,然后就做完了。

submission

「JOI Open 2022」放学路

显然先把最短路径DAG建出来,然后你发现只要路径上逆着走一条DAG上的边,或者走一条不在DAG上的边,那么就可以找到一条路径。

先建个圆方树求出 \(S\) 到 \(T\) 简单路径可能经过的点,然后把DAG缩小成只有这些点的DAG。容易发现如果DAG上有一条多余的边那么显然是可以经过这条边的,因此答案一定存在。

我们只需要考虑原来的边集恰好是这个DAG的情况。考虑没有出度的点,你发现是 \(T\) ,于是不用操作。再考虑只有一条出度且只有一条入度的点,那么无论是正着走还是倒着走路径都是固定的,因此可以缩掉。最后如果 \(S\) 和 \(T\) 直接联通,那么显然不行。否则就显然可以构造出来。

submission

【IOI2022】千岛

先考虑 \(0\) 出度的点,发现走到这个点就是送死,因此可以删掉。

再考虑如果起点只有一个出度,那么肯定是先往前走一步,然后以出度对应的点为新的起点求出答案,然后走回来。如果起点被删了就无解。

因此我们会得到一个图,满足起点至少有两个出度,每个点至少有一个出度。那么我们对于每个非起点的点保留恰好一条边,然后除去起点会得到一个基环树森林。

对于起点我们保留恰好两条出边,然后经过第一条边去那个基环树森林里面绕一圈出来,然后再经过第二条边,然后重复一次把环反过来,就可以得到一条路径。

其余情况显然无解。

submission

标签:DAG,出度,Yesterday,然后,times,一条,Three,出边,起点
From: https://www.cnblogs.com/275307894a/p/17114569.html

相关文章