[最大流] 计划安排

来源:互联网 发布:胸卡设计软件 编辑:程序博客网 时间:2024/06/06 08:30

题目描述 Description

Dramatic的工厂最近生意红火!有N位客户希望工厂为他们加工产品。每位客户都提供了需要加工的产品的类型,产品到达工厂的时间r和最迟完成加工的时间d。Dramatic根据需要加工的产品类型预计了每个产品加工所需的时间t。工厂里的生产车间一共有M台机器。每个产品在每台机器上都可以加工,但是,一台机器在任何时候最多只能加工一件产品,而一件产品在任何时候也最多只能被一台机器加工。同时,我们可以在某台机器正在加工时将工作打断,换另一个产品加工。Dramatic希望你帮他计算一下,能否找到一个方案,使得所有的产品都在规定的时间内完成加工?

输入 Input

第一行包含一个整数Q,表示数据组数。接下来Q组数据,每组数据的第一行包含两个整数NM,表示需要加工的产品的数量、机器的数量。接下来N行,每行三个整数tiridi,表示加工产品所需的时间,产品到达工厂的时间以及最迟完成加工的时间(即产品可以在[ridi]内被加工)。

输出 Output

包含Q行,每行对应一组数据的答案。如果第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

1Q10,1N100,1M5,1ti4000,0ri,di32767
Time Limit : 1s & Memory Limit : 128MB

放在了最大流专题,构图是够坑的。
首先让每个时间点都建在一张图里跑Dinic是会TLE的,虽然Dinic复杂度玄学……
于是选择缩时间轴,将开始和结束设为断点,断点之间形成的线段作为新点。那么就可以减少边数了。从原点连流量为ti的边到n件商品,商品的连边坑爹,因为我们可以在某台机器正在加工时将工作打断,换另一个产品加工,所以只要存在被ri,di包含的线段,那么这件商品就可以向这个时间段连流量为这条线段长的边,最后所有线段向汇点连长度×m的边,因为有m个机器。
这样就可以A了,时间复杂度为O(v2e)
Code

0 0
原创粉丝点击