每个讲课必定要用一个高清投影仪,所以我们就是要求的就是在高清投影仪在某些区间必放后,普通投影仪的合法分配方案。
因为研讨会既可以用高清投影仪,又可以用普通投影仪,而在当前时刻我们并不知道它到底是用哪一个更优。
于是我们要想办法解决普通投影仪在讲课已经占用一部分高清投影仪后的分配问题。
我们在考虑普通投影仪的分配方案时并不需要考虑每个讲课跨越的区间具体是什么,而只需要知道每个时刻被多少讲课所包含。比如
[
1
,
4
)
[1,4)
[1,4) 和
[
1
,
3
)
,
[
2
,
4
)
[1,3),[2,4)
[1,3),[2,4) 是没有区别的。
因此,在知道每个时刻被多少讲课所包含后,我们希望通过以研讨会为跨越时刻的边建立某种网络流。
若对于时刻 t + 0.5 t+0.5 t+0.5,有 X X X个讲课和 Y Y Y个研讨会正在发生,那么必须有 X ≤ x , X + Y ≤ x + y X\le x,X+Y\le x+y X≤x,X+Y≤x+y,并且可以得出此时最多有 min ( y , x + y − X − Y ) \min(y,x+y-X-Y) min(y,x+y−X−Y)个普通投影仪处于空闲状态。(如果不满足前两个条件直接输出NO)
对(离散后的)时间线建立网络流:
源点到时间1的边容量为
∞
\infty
∞
时间
t
t
t到时间
t
+
1
t+1
t+1的容量为
min
(
y
,
x
+
y
−
X
−
Y
)
\min(y,x+y-X-Y)
min(y,x+y−X−Y),表示时刻
t
+
0.5
t+0.5
t+0.5最多空闲的普通投影仪。
对研讨会
[
p
i
,
q
i
)
[p_i,q_i)
[pi,qi),建立
p
i
→
q
i
p_i\to q_i
pi→qi,容量为1,这条边有1的流量表示这个研讨会用的是普通投影仪。
时间末尾即为汇点
时间轴上的一个流量表示空闲的普通投影仪,跨越区间的流量表示在对这个研讨会使用了普通投影仪,如果流量没有经过这条跨区间的边而选择了走时间轴,这说明有一个高清投影仪用在了这个研讨会上,它能够走过时间轴意味着 x > X x>X x>X,即剩余的高清投影仪补充了“空闲的普通投影仪”的容量。
举例说明:
如果没有高清投影仪剩余,那么时间轴上的容量就是
y
−
y-
y−正在进行的研讨会数量,一个流量可以这样穿过去:
如果有高清投影仪剩余,那么时间轴上就有一些补充容量,可以这样流:
上图中高清投影仪可以用在任何一个地方。
如果这个时候存在一个讲课,比如说:
这时候第三次研讨会就必须使用高清投影仪。
可以发现我们的网络流实际上为一个研讨会提供了一个不选普通投影仪的选择,而“最多的空闲”实际上限制了在某些位置必须选择普通投影仪而不能选择高清投影仪(如果某个位置不能存在空闲而我们流过来一个流量,意味着我们在前面某个该用普通投影仪的位置没有用普通投影仪),结合这个例子理解:
在这个例子中,我们的最大流没有达到
y
y
y,意味着不存在普通投影仪的合法分配方案。
如果最大流达到了
y
y
y,那么必定存在满足条件的解,我们每次从汇点向源点退1的流量,如果某条研讨会的边此次有流量经过说明使用了普通投影仪,如果
y
y
y个流量都没有经过它这说明使用了高清投影仪。
然后高清投影仪在讲课需要的时候直接放就可以了,可以保证一定是预留出来了的。
Nice Problem!
Code:咕咕咕