题意

传送门

有 \(a+b+1\) 个会动的棋子,在一个大小为 \(n\times m\) 的棋盘上,棋盘上有一些点有障碍。棋子中,有 \(a\) 个红色棋子,\(b\) 个蓝色棋子,和 \(1\) 个既能当作红棋子又能当作蓝棋子的通配棋子。

一个局面是好的,当且仅当对于每个格子,要么这个格子上没有棋子,要么这个格子上恰好存在一个红棋子与一个蓝棋子。

每个棋子有自己的初始位置 \((x_i,y_i)\) 和速度 \(t_i\),其中 \(t_i\) 表示自己走到相邻的格子所需要的时间。

你可以控制所有棋子的移动。请问最少多少时间后能达到处于一个好的局面。或输出无解。

\(1 \le n,m \le 22,0 \le a,b \le n \times m,1 \le t_i \le 10^9\)。

题解

首先 \(|a-b|=1\),否则无解。然后就变成 \(k\) 个红棋子与 \(k\) 个蓝棋子。

乍一看是二分图匹配。但实际上每个格子只能容纳一对棋子,故不能直接套用。

类似二分图,我们不难想到用网络流来解决这种匹配问题。因为每个棋子到任意格子的距离是已知的,故尝试二分答案。

首先将每个格子拆为入点和出点,其间连一条边。依次考虑红棋子 \(i\) 与格子 \(j\),如果 \(i\) 到 \(j\) 的时间不大于当前二分的 \(mid\),则从 \(i\) 连一条边到 \(j\) 的入点。同理,如果蓝棋子 \(i\) 到格子 \(j\) 的时间不大于 \(mid\),则从 \(j\) 的出点连一条边到 \(i\)。再从源点到所有红棋子连边,从所有蓝棋子到汇点连边。所有边的容量均为 \(1\)。跑最大流,判断其是否等于 \(k\) 即可。

这种做法的时间复杂度为 \(O(n^6 \log a)\),其中 \(a\) 为最大时间。显然不能通过。

发现瓶颈在于二分答案。因为网络流有一个很好的性质:往网络中加边,不必重构网络,直接跑就可以得出新的最大流。于是尝试另一种方式:对于所有连接棋子与格子的边,按照其时间从小到大加入。每加一条边跑一次最大流。则当最大流等于 \(k\) 时,加入的边的时间就是答案。复杂度为 \(O(n^4 \times n^4)=O(n^8)\)。

这样就有新的优化空间了。考虑将边分块:设有 \(t\) 条边,每 \(\sqrt t\) 条分为一组。每次加入一组并跑最大流。当最大流等于 \(k\) 时,再将这组的边重新一条条加入。这样的复杂度为 \(O(\sqrt{n^4} \times n^4)=O(n^6)\)。可以通过。

但实际上因为大常数,你还是会 TLE on test 87。解决办法是卡常,或者像我一样:分块套分块。设一个阈值 \(\alpha\),先将块长设为 \(t^{\alpha}\),等最大流等于 \(k\) 时,再将当前块分块,块长为 \(\displaystyle t^{\alpha^2}\)。则复杂度为 \(\displaystyle O((t^{1-\alpha}+t^{\alpha(1-\alpha)}+t^{\alpha^2})\times n^4)\),易知 \(\alpha=\frac{\sqrt5-1}{2}\),化简一下就是 \(n^{5.528}\)。可以通过。

CF513F2 题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. js中常用Math对象

    js中常用Math对象 Math.round()四舍五入 Math.ceil() ->ceil 天花板--->向上取整 Math.floor() 向下取整 Math.floor(-11.1 ...

  2. 回归分析 3.X 多元线性回归

    多元线性回归模型 参数估计 模型表示 我们先将模型 \[y_{i}=\beta_{0}+\beta_{1} x_{i 1}+\cdots+\beta_{p} x_{i k}+\epsilon_{i}, ...

  3. c++练习267题 火柴棒等式

    *267题 原题传送门:http://oj.tfls.net/p/267 题解: #include<bits/stdc++.h>using namespace std;int c,m;in ...

  4. Vuex 部分

    Vuex 部分 官网链接 https://vuex.vuejs.org/zh/ 先说一下vuex到底是什么? vuex 是一个专门为vue.js应用程序开发的状态管理模式. 这个状态我们可以理解为在d ...

  5. WDA学习(26):Phase Indicator使用

    1.19 UI Element:Phase Indicator使用 本实例测试创建Phase Indicator; 运行结果: 1.创建Component,View: V_PHASE_IND; 2.创 ...

  6. 安全测试-WEB安全渗透测试基础知识(五)

    1.5. 代码审计 1.5.1. 简介 代码审计是找到应用缺陷的过程.其通常有白盒.黑盒.灰盒等方式.白盒指通过对源代码的分析找到应用缺陷,黑盒通常不涉及到源代码,多使用模糊测试的方式,而灰盒则是黑白 ...

  7. QT debug/moc_frmalarminfo.o:(.data.rel.ro._ZTV12FrmAlarmInfo[_ZTV12FrmAlarmInfo]+0x1c0): undefined reference to `non-virtual thunk to FrmAlarmInfo::~FrmAlarmInfo()'解决方法

    这个报错很具有迷惑性,,,我在网上还看见了ZTI12的报错,但是仔细一看发现是.o文件报错. 简单解释下.o文件(此解释来自百度): o 就是object, 也就相当于windows下编译的obj文件 ...

  8. Axure的认识与使用

    [软件介绍] Axure RP 是一款产品经理必备的交互式快速产品原型设计制作工具,能够高效率的制作产品原型,快速绘制线框图.流程图.网站架构图.示意图.HTML 模版等. [工具使用] 1.环境与画 ...

  9. java心形打印999

    心形打印999 农历七月初七,七夕节也就是中国民间版的所谓情人节,利用java打印心型999个图案可以让程序员更浪漫一些.现在下面由小编简要的说一下如何做到.首先下面是打印心形但却不是999个的代码, ...

  10. AcWing 841. 字符串哈希 2022/5/25

    include include using namespace std; typedef unsigned long long ULL; char str[N]; //存放字符串 int h[N], ...