A. 杨柳
如果没有棋子不能重叠的限制,那么显然可以费用流跑匹配(虽然二分图不能A)。
考场上到这我就不会了。
实际上可以忽略这个限制。可以让被卡住的先走,或者交换目标。
如果拎出棋子和红格建二分图,边数可达到(n^2)级别。费用流边数是极大影响因素。
所以直接在棋盘上建边,S向棋子连1流0费边,红格向T连1流0费边,可以转移的格子间连inf流1费边。
费用只有01,跑zkw费用流。
B. 景中人
分析可知矩形在横坐标上只有相离和包含两种关系。
考虑区间DP,f[i][j][k]为[i,j]区间内>k的点都被覆盖过的最小矩形数。
对于相离,有转移f[i][j][k]=min(f[i][p][k]+f[p+1][j][k])
对于包含,由于区间DP的转移顺序,可以规定只在i,j为两端点处放置矩形,这样可以得到包含关系。
贪心可知每次一定放能放置的最大矩形,用单调指针对于不同的横坐标之差预处理下。
设h[i]为横坐标之差为i能放置的最大高度,那么f[i][j][k]=min(f[i][j][k],f[i][j][h[x[j]-x[i]]]+1)
复杂度为(O(Tn^4))
C. 钦点
暴力考虑边复杂度不允许,这种情况下考虑生成树之类减少边数或者建虚点把等价点一起考虑。
性质1,对于合数d,d|a[k],所有k形成完全图。
对d建虚点,和d|a[k]的k连边,在新图上考虑非虚点与原图等价。相当于是只考虑不同等价类。
性质2,可以选取只有两个质数组成的d,仍然成立。因为可以只取极大完全图。
在新图上考虑答案是什么,删点使图不连通即割点,且该割点一定存在于最大的连通块中,断开后最大的连通块最小,然后和总图的次大连通块取max。
线筛预处理每个数的最小质因子,可以在(O((质因子个数)^2))内得到d,然后用Tarjan找割点顺便处理答案。
复杂度两个小log,我写的还带有一个map的log