码迷,mamicode.com
首页 > 其他好文 > 详细

【最大流】XMU 1595 机器调度

时间:2016-05-08 10:21:10      阅读:439      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1595

题目大意

  T组数据,n个任务,m个机器,对于每个任务:有一个处理时间p(表示这个任务需要机器工作p天才能完成),一个释放时间r(表示该任务需要从第r天开始才能被处理),一个完成时间d(表示在第d天之前该任务必须完成)保证:d >= p + r。一个任务同一时间只能在一个机器上运行,但是运行时可以被中断,并移到另一个机器上运行。对于每台机器:在同一时间最多只能处理一个任务,在不同的时间可以处理不同的任务。问是否存在一个调度方案,使得所有任务均可以顺利完成?

题目思路:

  【最大流】

  没看出来是网络流问题。

  将任务和该任务能运行的时间连边,S到任务连处理时间,时间到T连可运行机器数。

  裸最大流。

 

技术分享
  1 //
  2 //by coolxxx
  3 //
  4 #include<iostream>
  5 #include<algorithm>
  6 #include<string>
  7 #include<iomanip>
  8 #include<memory.h>
  9 #include<time.h>
 10 #include<stdio.h>
 11 #include<stdlib.h>
 12 #include<string.h>
 13 #include<stdbool.h>
 14 #include<math.h>
 15 #define min(a,b) ((a)<(b)?(a):(b))
 16 #define max(a,b) ((a)>(b)?(a):(b))
 17 #define abs(a) ((a)>0?(a):(-(a)))
 18 #define lowbit(a) (a&(-a))
 19 #define sqr(a) ((a)*(a))
 20 #define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))
 21 #define eps 1e-8
 22 #define J 10
 23 #define MAX 0x7f7f7f7f
 24 #define PI 3.1415926535897
 25 #define inf 10000000
 26 #define N 504
 27 #define M 50004
 28 using namespace std;
 29 int n,m,lll,ans,cas;
 30 int nn,fl,s,t;
 31 int last[N],d[N],vd[N];
 32 struct xxx
 33 {
 34     int next,e,q;
 35 }a[M];
 36 void add(int x,int y,int z)
 37 {
 38     a[++lll].next=last[x];
 39     a[lll].e=y;
 40     a[lll].q=z;
 41     last[x]=lll;
 42 }
 43 int sap(int u,int f)
 44 {
 45     int i,v,tt,asp=0,mix=nn-1;
 46     if(u==t)return f;
 47     for(i=last[u];i!=0;i=a[i].next)
 48     {
 49         v=a[i].e;
 50         if(a[i].q>0)
 51         {
 52             if(d[u]==d[v]+1)
 53             {
 54                 tt=sap(v,min(f-asp,a[i].q));
 55                 asp+=tt;
 56                 a[i].q-=tt;
 57                 a[i^1].q+=tt;
 58                 if(asp==f || d[s]==nn)
 59                     return asp;
 60             }
 61             mix=min(mix,d[v]);
 62         }
 63     }
 64     if(asp!=0)return asp;
 65     if(!--vd[d[u]])d[s]=nn;
 66     else vd[d[u]=mix+1]++;
 67     return asp;
 68 }
 69 void build()
 70 {
 71     int i,j,x,y,z;
 72     s=100+200+1;t=100+200+2;
 73     nn=0;
 74     for(i=1;i<=n;i++)
 75     {
 76         scanf("%d%d%d",&x,&y,&z);
 77         fl+=x;nn=max(nn,z);
 78         add(s,i,x);add(i,s,0);
 79         for(j=y;j<z;j++)
 80         {
 81             add(i,n+j,1);add(n+j,i,0);
 82         }
 83     }
 84     for(i=1;i<=nn;i++)
 85     {
 86         add(n+i,t,m);add(t,n+i,0);
 87     }
 88     nn+=n+2;
 89     vd[0]=nn;
 90 }
 91 int main()
 92 {
 93     #ifndef ONLINE_JUDGE
 94 //    freopen("1.txt","r",stdin);
 95 //    freopen("2.txt","w",stdout);
 96     #endif
 97     int i,j,k,l,f;
 98 //    while(~scanf("%s",s1))
 99 //    while(~scanf("%d",&n))
100     for(scanf("%d",&cas),l=1;l<=cas;l++)
101     {
102         fl=ans=0;lll=1;
103         memset(d,0,sizeof(d));
104         memset(vd,0,sizeof(vd));
105         memset(last,0,sizeof(last));
106         scanf("%d%d",&n,&m);
107         build();
108         while(d[s]<nn)
109         {
110             f=sap(s,MAX);
111             ans+=f;
112         }
113         if(ans==fl)puts("Yes");
114         else puts("No");
115     }
116     return 0;
117 }
118 
119 /*
120 //
121 
122 //
123 */
View Code

 

【最大流】XMU 1595 机器调度

标签:

原文地址:http://www.cnblogs.com/Coolxxx/p/5469875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!