题目描述 Description
Dramatic的工厂最近生意红火!有 N N N位客户希望工厂为他们加工产品。每位客户都提供了需要加工的产品的类型,产品到达工厂的时间 r r r和最迟完成加工的时间 d d d。Dramatic根据需要加工的产品类型预计了每个产品加工所需的时间 t t t。工厂里的生产车间一共有 M M M台机器。每个产品在每台机器上都可以加工,但是,一台机器在任何时候最多只能加工一件产品,而一件产品在任何时候也最多只能被一台机器加工。同时,我们可以在某台机器正在加工时将工作打断,换另一个产品加工。Dramatic希望你帮他计算一下,能否找到一个方案,使得所有的产品都在规定的时间内完成加工?
输入 Input
第一行包含一个整数 Q Q Q,表示数据组数。接下来 Q Q Q组数据,每组数据的第一行包含两个整数 N , M N,M N,M,表示需要加工的产品的数量、机器的数量。接下来 N N N行,每行三个整数 t i 、 r i 、 d i t_i、r_i、d_i ti、ri、di,表示加工产品所需的时间,产品到达工厂的时间以及最迟完成加工的时间(即产品可以在 [ r i , d i ] [r_i,d_i] [ri,di]内被加工)。
输出 Output
包含 Q Q Q行,每行对应一组数据的答案。如果第i组数据能搞找到一个方案,则第 i i i行包含一个Yes,否则包含一个No。
样例输入 Sample Input
2
2 1
3 5 9
4 8 12
3 1
2 2 9
2 3 5
3 5 8
样例输出 Sample Output
Yes
Yes
限制 Limits
1 ≤ Q ≤ 10 , 1 ≤ N ≤ 100 , 1 ≤ M ≤ 5 , 1 ≤ t i ≤ 4000 , 0 ≤ r i , d i ≤ 32767 1≤Q≤10,1≤N≤100,1≤M≤5,1≤t_i≤4000,0≤r_i,d_i≤32767 1≤Q≤10,1≤N≤100,1≤M≤5,1≤ti≤4000,0≤ri,di≤32767
Time Limit : 1s & Memory Limit : 128MB
放在了最大流专题,构图是够坑的。
首先让每个时间点都建在一张图里跑Dinic是会TLE的,虽然Dinic复杂度玄学…
于是选择缩时间轴,将开始和结束设为断点,断点之间形成的线段作为新点。那么就可以减少边数了。从原点连流量为
t
i
t_i
ti的边到
n
n
n件商品,商品的连边坑爹,因为我们可以在某台机器正在加工时将工作打断,换另一个产品加工,所以只要存在被
r
i
,
d
i
r_i,d_i
ri,di包含的线段,那么这件商品就可以向这个时间段连流量为这条线段长的边,最后所有线段向汇点连长度
×
m
\times m
×m的边,因为有
m
m
m个机器。
这样就可以A了,时间复杂度为
O
(
v
2
e
)
O(v^2e)
O(v2e)。
Code