题目链接:传送门

题目大意:有n个任务,m个机器。每个机器最早在 Si 天开始,最晚在 Ei 天结束,需要 Pi 天完成。可以中途换机器做,也可以中途打断不做,过后再做

       只要在规定时间内都行。每个机器一天只能处理一个任务。问是否能在规定时间完成。

题目思路:知道是网络流,但是不会建图。

       自己建图的时候,想法是 S 与任务建边容量为Pi,然后 T 与机器建边,容量为inf,然后时间就不知道怎么处理了。 卡死在这了。

     其实知道 任务,机器,时间这三个条件后完全可以变通一下建图的,但是没有转过弯来。还需要继续努力。

     正解: 让 S 与任务连边,容量为Pi,T 与时间连边,容量为机器数,任务和时间连边(从起始时间到结束时间),容量 1。

     这样把所有限制条件都利用了起来,最后只需判断 最大流与 sum(Pi) 是否相等。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <cstring>
  7. #include <stack>
  8. #include <cctype>
  9. #include <queue>
  10. #include <string>
  11. #include <vector>
  12. #include <set>
  13. #include <map>
  14. #include <climits>
  15. #define lson rt<<1,l,mid
  16. #define rson rt<<1|1,mid+1,r
  17. #define fi first
  18. #define se second
  19. #define ping(x,y) ((x-y)*(x-y))
  20. #define mst(x,y) memset(x,y,sizeof(x))
  21. #define mcp(x,y) memcpy(x,y,sizeof(y))
  22. using namespace std;
  23. #define gamma 0.5772156649015328606065120
  24. #define MOD 1000000007
  25. #define inf 0x3f3f3f3f
  26. #define N 1105
  27. #define maxn 500005
  28. typedef pair<int,int> PII;
  29. typedef long long LL;
  30.  
  31. int head[N],cur[N],pre[N],d[N],gap[N];
  32. int n,m,hcnt,S,T,sum;
  33. struct Node{
  34. int to,nxt,v;
  35. Node(){}
  36. Node(int a,int b,int c):to(a),nxt(b),v(c){}
  37. }node[maxn];
  38. inline void add(int x,int y,int v){
  39. node[hcnt]=Node(y,head[x],v);head[x]=hcnt++;
  40. node[hcnt]=Node(x,head[y],);head[y]=hcnt++;
  41. }
  42. bool ISAP(int S,int T,int n){ ///起点,终点,总共点数(加上源汇点)
  43. int ans=,aug=inf,i,flag; ///最大流,可增广流量,.,标记
  44. int u,e,dis; ///当前点,当前可达点
  45. mst(gap,);mst(d,);
  46. for(i=;i<=n;++i) cur[i]=head[i];
  47. u=pre[S]=S;
  48. while(d[S]<n){
  49. flag=;
  50. for(i=cur[u];~i;i=node[i].nxt){
  51. e=node[i].to;
  52. if(node[i].v>&&d[u]==d[e]+){
  53. flag=;
  54. break;
  55. }
  56. }
  57. if(flag){
  58. pre[e]=u;
  59. cur[u]=i;
  60. aug=min(aug,node[i].v);
  61. u=e;
  62. if(u==T){
  63. while(u!=S){
  64. u=pre[u];
  65. node[cur[u]].v-=aug;
  66. node[cur[u]^].v+=aug;
  67. }
  68. u=S;
  69. ans+=aug;
  70. aug=inf;
  71. }
  72. }
  73. else{
  74. if(--gap[d[u]]==)break;
  75. dis=n;
  76. cur[u]=head[u];
  77. for(int i=head[u];~i;i=node[i].nxt){
  78. e=node[i].to;
  79. if(node[i].v>&&d[e]+<dis){
  80. dis=d[e]+;
  81. cur[u]=i;
  82. }
  83. }
  84. d[u]=dis;
  85. ++gap[dis];
  86. if(u!=S)
  87. u=pre[u];
  88. }
  89. }
  90. return ans==sum;
  91. }
  92. int main(){
  93. int i,j,group,x,y,v;
  94. scanf("%d",&group);
  95. for(int g=;g<=group;++g){
  96. mst(head,-);hcnt=;
  97. scanf("%d%d",&n,&m);
  98. sum=S=;T=n++;
  99. for(i=;i<=n;++i){
  100. scanf("%d%d%d",&v,&x,&y);
  101. sum+=v;
  102. add(S,i,v);
  103. for(j=x;j<=y;++j)
  104. add(i,n+j,);
  105. }
  106. for(i=;i<=;++i)add(i+n,T,m);
  107. printf("Case %d: ",g);
  108. if(ISAP(S,T,T+))printf("Yes\n\n");
  109. else printf("No\n\n");
  110. }
  111. return ;
  112. }

HDU 3572(Task Schedule) ISAP做法的更多相关文章

  1. hdu 3572 Task Schedule (dinic算法)

    pid=3572">Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. HDU 3572 Task Schedule (最大流)

    C - Task Schedule Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  3. HDU 3572 Task Schedule(拆点+最大流dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  4. hdu 3572 Task Schedule

    Task Schedule 题意:有N个任务,M台机器.每一个任务给S,P,E分别表示该任务的(最早开始)开始时间,持续时间和(最晚)结束时间:问每一个任务是否能在预定的时间区间内完成: 注:每一个任 ...

  5. hdu 3572 Task Schedule(最大流&amp;&amp;建图经典&amp;&amp;dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. HDU 3572 Task Schedule(ISAP模板&amp;&amp;最大流问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=3572 题意:m台机器.须要做n个任务. 第i个任务.你须要使用机器Pi天,且这个任务要在[Si  , ...

  7. hdu 3572 Task Schedule 网络流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3572 Our geometry princess XMM has stoped her study i ...

  8. 解题报告:hdu 3572 Task Schedule(当前弧优化Dinic算法)

    Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...

  9. hdu 3572 Task Schedule (Dinic模板)

    Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...

  10. 图论--网络流--最大流 HDU 3572 Task Schedule(限流建图,超级源汇)

    Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...

随机推荐

  1. Git-Git Book阅读笔记

    git diff [fname]    查看工作区与缓存区异同 git diff --staged [fname]    查看缓存区与上次提交之间的差异 git diff HEAD [fname] 查 ...

  2. 关于nodejs中npm命令没有反应的解决方法

    最近在学习angularJS,正在做一个单页面应用,在安装nodejs之后,发现命令行传了输入npm -v能输出结果外,其余npm的任何操作都没有反应,一开始我以为是下载的比较慢,等了半小时还是没动静 ...

  3. flashback database(drop tablespace)

    1.首先记录时间 select to_char(systimestamp,'yyyy-mm-dd HH24:MI:SS') from dual;--2014-04-25 13:55:48 查看表sel ...

  4. python基础篇---实战---用户登入注册程序

    一.首先了解需求: 1.支持多个用户登入 2.登入成功后显示欢迎,并退出程序 3.登入三次失败后,退出程序,并在下次程序启动尝试登入时,该用户名依然是锁定状态 二.文件代码如下: f = open(& ...

  5. Node.js搭建本地web服务(转)

    http://www.cnblogs.com/wangfupeng1988/p/4143996.html https://github.com/finderL/webserver

  6. springMVC中实现用户登录权限验证

    通过上网搜资料显示,使用filter和interceptor都可以实现.不过推荐使用interceptor. 下面就使用Interceptor实现用户登录权限验证功能. 拦截器需要实现Inceptor ...

  7. myeclipse的user library不自动部署到WEB-INF/lib目录下的解决办法

    右键进入项目属性 Properties 点进去 左边 MyEclipse -> Deployment Assembly 右边 Add -> JavaBuild Path Entries - ...

  8. [k8s]kubectl windows配置(kubernetic) && kubectl config set-context使用Kubernetic

    参考: https://feisky.gitbooks.io/kubernetes/components/kubectl.html https://kubernetes.io/docs/tasks/t ...

  9. python3 解析xml

    转载:http://www.jb51.net/article/79494.htm 这篇文章主要为大家详细介绍了深入解读Python解析XML的几种方式,以ElementTree模块为例,演示具体使用方 ...

  10. jQuery 实战读书笔记之第三章:操作 jQuery 集合

    创建新 HTML 元素 $('<div>Hello</div>'); /* 创建等价的空 div 元素 */ $('<div>'); $('<div /> ...