首页 > 其他 > 详细

解题:八省联考2018 劈配

时间:2019-02-26 20:18:17      阅读:159      评论:0      收藏:0      [点我收藏+]

题面

看起来就很像匹配问题嘛,连题目名都在提示你=。=

这题真是把匹配问题的细节发挥到了极致,不过还好送70,考场上应该不至于挂得太惨

那不如先说说70分的暴力怎么写

对于测试点2,3,n,m很小。第一问$O(n^{m+1})$暴力枚举答案(结果),第二问对每个选手枚举他新的名次变成第一问。复杂度$O(n^{m+3})$(为啥官方题解说是$O(n^{m+2})$?算了反正都能过)

对于C=1的测试点,导师们不并列。第一问直接模拟,第二问仍然枚举新名次(这题第二问都是这样直接转成第一问做=。=)。复杂度$O(n^4)$不太能过。不过把第二问的枚举换乘二分就稳了,复杂度$O(n^3\log n)$

来考虑正解

正解1 魔改匈牙利

我们从$b_i=1$的部分分开始— —每个导师都只选一个人,类似二分图匹配,只是多了一个优先级,怎么做?做法是动态加边,我们仍然依次考虑每个选手,把他的志愿从高到低依次加入,加一个就尝试在这条路上增广(匈牙利单次增广复杂度为$O(m)$),这样总复杂度是$O(n*m)$的(匈牙利的复杂度)。然后第二问还是熟悉的二分转第一问,总复杂度$O(n^4\log n)$($m$是$n^2$级别的),变得更差了=。=???

(官方题解:技术分享图片)

不要着急,慢慢改进嘛=。=

一个优化是一个人的一个志愿增广失败就再把边删掉,复杂度$O(Cn^3\log n)$,常数小也许能跑过去

先继续考虑$b_i$不一定为$1$的情况,来尝试抢救一下之前的算法:把导师拆点来跑,加上优化复杂度$O(max_b*Cn^3\log n)$

 

解题:八省联考2018 劈配

原文:https://www.cnblogs.com/ydnhaha/p/10439537.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!