USACO题单 做题记录

P8186 Redistributing Gifts S

题意

\(n\) 个奶牛,每个人初始分配到礼物 \(i\),每个奶牛有一个礼物单,礼物单里越靠前,则该奶牛越想要该礼物,此时允许重新分配礼物,求每个奶牛可能被分配到的最想要的礼物。\(1\le n \le 500\)

思路

首先得留意到这个最终的答案可能是由不同的方案拼凑而成的,在答案中并不需要同时满足所有的最佳情况。
对于每个 \(i\),只想选比自己现在的更好的或和现在一样的,那么在排列 \(i\) 中排在 \(i\) 后面的就可以不用考虑。
枚举每个排列。如果当前的是可行的,则就是最优,即为 \(i\) 的答案。怎么判断是否可行呢?
如果 \(i\) 选了 \(j\)\(j\) 就得选其他的,因为此时的 \(j\) 初始选的是它自己编号,被 \(i\) 抢了。选不选最优都没关系,只需要保证该方案有可行解就行,依此类推。当现在的这头牛没有可以选的了(它可以选的都被之前的牛选过了),那它就是最后一头。最后这头牛必须选回 \(i\) ,否则它没别的可以选,就不合法。那么也就是得要形成一个环。
于是建图,每头牛对想要的礼物连边, 判环可以 \(floyd\) 传递闭包处理,对于当下的枚举, \(i\) 必须选 \(j\) ,只需要看 \(j\) 能否走回 \(i\),能就是有解。

posted @ 2025-09-26 21:48  Sqqqz185  阅读(7)  评论(0)    收藏  举报