2020杭电多校第四场 1007 Go Running Dinic最大流跑二分图匹配

这篇博客介绍了如何将求解在一条双向轴上跑步同学最少数量的问题转化为二分图匹配问题。通过坐标轴旋转45度,使斜率为1或-1的直线便于处理。然后构建二分图,将问题转换为求最小点覆盖,进一步得到最大匹配。由于点的数量级,博主选择了使用Dinic算法以O(N√N)的复杂度求解最大流,以解决原问题。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述
题目链接

题目大意是这样的:在一条双向的轴上,有若干同学在跑步,每位同学的速度是固定的,都是1单位长度/s。在n个时刻t,位置
x上将至少有一个人在跑步,但是方向不确定,仅能确定有人。

需要求解的问题就是根据这n个时刻的信息,问能确定最少有多少同学在跑步?

二分图匹配

首先这个问题,以时间为横轴,位置为纵轴建系x-t图像,将n个数据描点。

题目中提到学生跑步有起始时间和终止时间,反映在坐标系上就是一条线段。但是由于题目要求的是最小的学生数量,因此不妨假设学生跑步时间是无限长,且开始的无限早,这反映在坐标系上就是一条直线

也就是说倘若一个学生在向正方向跑,那么其跑出的直线斜率为1,反之斜率为-1。

如果两个点描述的是同一个学生,那么这两个点就在同一条直线上。

那么问题就转变成了给定n个点,使用斜率为1或者-1的直线覆盖这些点,问最少直线数量是多少?

斜率为-1或1不太好处理,我们不妨将坐标轴顺时针旋转45°。

我们假设原横纵坐标为t,p;

可使用矩阵乘法进行旋转:

[ x y ] = [ 1 1 1 − 1 ] [ t p ] \begin{bmatrix} x\\ y \end{bmatrix}= \begin{bmatrix} 1 & 1\\ 1 & -1 \end{bmatrix} \begin{bmatrix} t\\ p \end{bmatrix} [xy]=[1111][tp]
即:
{ x = t + p y &#

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值