题意 给出N个任务和M台机器

任务中给出 C  S E 分别表示 所需时间  任务开始时间  任务结束时间

即任务需要在开始到结束这时间段中完成。

一个任务可以在不同的机器上完成,但每次在机器上至少要运行一天

建边, 源点-任务 容量为C

任务-时间段上的每一个时间点 容量为1

时间点-汇点 容量为 M

最大流 >= sigma(C)则YES else NO

(最大所需点数为n+m+2;)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <math.h>
using namespace std;
#include <queue>
#include <stack>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <time.h>;
#define cler(arr, val)    memset(arr, val, sizeof(arr))
#define IN     freopen ("in.txt" , "r" , stdin);
#define OUT  freopen ("out.txt" , "w" , stdout);
typedef long long  LL;
const int MAXN = 200010;//点数的最大值
const int MAXM = 200006;//边数的最大值
const int INF = 0x3f3f3f3f;
const int mod = 10000007;
struct Edge
{int to,next,cap,flow;
}edge[MAXM];//注意是MAXM
int tol;
int head[MAXN];
int gap[MAXN],dep[MAXN],cur[MAXN];
void init()
{tol = 0;memset(head,-1,sizeof (head));
}
void addedge (int u,int v,int w,int rw = 0)
{edge[tol].to = v; edge[tol].cap = w; edge[tol].flow = 0;edge[tol].next = head[u]; head[u] = tol++;edge[tol].to = u; edge[tol].cap = rw; edge[tol].flow = 0;edge[tol].next = head[v]; head[v] = tol++;
}
int Q[MAXN];
void BFS(int start,int end)
{memset(dep,-1,sizeof(dep));memset(gap,0,sizeof(gap));gap[0] = 1;int front = 0, rear = 0;dep[end] = 0;Q[rear++] = end;while(front != rear){int u = Q[front++];for(int i = head[u]; i !=  -1; i = edge[i].next){int v = edge[i]. to;if(dep[v] != -1)continue;Q[rear++] = v;dep[v] = dep[u] + 1;gap[dep[v]]++;}}
}
int S[MAXN];
int sap(int start,int end, int N)
{BFS(start,end);memcpy(cur,head,sizeof(head));int top = 0;int u = start;int ans = 0;int i;while(dep[start] < N){if(u == end){int Min = INF;int inser;for( i = 0;i < top;i++){if(Min > edge[S[i]].cap - edge[S[i]].flow){Min = edge[S[i]].cap - edge[S[i]].flow;inser = i;}}for( i = 0;i < top;i++){edge[S[i]]. flow += Min;edge[S[i]^1].flow -= Min;}ans += Min;top = inser;u = edge[S[top]^1].to;continue;}bool flag =  false;int v;for( i = cur[u]; i != -1; i = edge[i]. next){v = edge[i]. to;if(edge[i].cap - edge[i].flow && dep[v]+1 == dep[u]){flag =  true;cur[u] = i;break;}}if(flag){S[top++] = cur[u];u = v;continue;}int Min = N;for( i = head[u]; i !=  -1; i = edge[i].next){if(edge[i].cap - edge[i].flow && dep[edge[i].to] < Min){Min = dep[edge[i].to];cur[u] = i;}}gap[dep[u]]--;if(!gap[dep[u]]) return ans;dep[u] = Min + 1;gap[dep[u]]++;if(u != start)u = edge[S[--top]^1].to;}return ans;
}
int main()
{//IN;int t,cas=0,m,n;scanf("%d",&t);while(t--){init();scanf("%d %d",&n,&m);int e=500+n+1,sum=0;for(int i=1;i<=500;i++){addedge(n+i,e,m);}for(int i=1;i<=n;i++){int x,y,c;scanf("%d %d %d",&c,&x,&y);sum+=c;addedge(0,i,c);//源点到任务for(int j=x;j<=y;j++)//任务到天{addedge(i,n+j,1);}}printf("Case %d: ",++cas);int out=sap(0,e,n+500+2);//  printf("%d\n",out);if(out>=sum)puts("Yes");else puts("No");puts("");}
}

转载于:https://www.cnblogs.com/kewowlo/p/4002469.html

【最大流】 HDU 3572 Task Schedule相关推荐

  1. hdu 3572 Task Schedule IPSA 最大流

    题意: 题目意思: 给出 N 件任务和 M台机器, 这N件任务都一个限制: 必须在 [S,E] 之间完成, 而且完成的时间不能超过 P. 一台机器每天只能做意见任务, 不过庆幸的是: 任务是可以拆分的 ...

  2. hdu 3572 Task Schedule 网络流

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

  3. HDU 3572 Task Schedule

    传送门 作业调度,这道题还真没想到能用网络流....乍一看跟背包问题差不多. 有N个作业,M个机器,每个作业给你一个耗费时间(时间段)以及最早开始时间和最晚完成时间(这两个是时间点),单位是天.一个作 ...

  4. 题解报告:hdu 4907 Task schedule

    Problem Description 有一台机器,并且给你这台机器的工作表,工作表上有n个任务,机器在ti时间执行第i个任务,1秒即可完成1个任务. 有m个询问,每个询问有一个数字q,表示如果在q时 ...

  5. HDU 4907 BestCoder3_1 Task schedule

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

  6. light task schedule的定时任务实现源码解析

    light task schedule(以下简称lts)的任务调度是在jobTracker中实现的. 以下关于任务队列的数据存储以mysql为例子. jobTracker中进行调度的任务需要jobCl ...

  7. TASK SCHEDULE(任务计划)服务无法运行 解决方案

    Q:TASK SCHEDULE(任务计划)服务无法运行? A:因为Event Log服务没有打开,所以TASK SCHEDULE服务也打不开 转载于:https://www.cnblogs.com/w ...

  8. LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷

    LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷

  9. hdu 3572(最大流)

    建图:把每个任务和每一天都看做一个点,添加源点和汇点.源点与每个任务之间连一条边,容量为完成该任务所需处理次数.若第i个任务可以在Si至Ei天处理,则由该任务向这些天分别连一条边,容量为1,表示此任务 ...

  10. Task Schedule

    http://acm.hdu.edu.cn/showproblem.php?pid=3572 题意:给N个任务,M台机器.每个任务有最早才能开始做的时间S,deadline E,和持续工作的时间P.每 ...

最新文章

  1. Random类(Java中的随机类)
  2. WPF:Graphics图表--EncodingAndersonDecoding图像编解码(2)
  3. 小程序-wx:for
  4. Spring Cloud【Finchley】-18 Zuul过滤器
  5. 6. Qt 信号与信号槽 (6)- QObject::connect
  6. MYBATIS 批量update 报错的问题
  7. EventBus设计与实现分析——事件的发布
  8. 使用ThreadLocal不当可能会导致内存泄露
  9. 程序员面试金典 - 面试题 08.13. 堆箱子(DP)
  10. cdr 表格自动填充文字_做平面广告设计,AI和CDR如何选择?
  11. windows批处理脚本bat
  12. 从JSON示例数据生成Web应用程序代码
  13. Linux查 ssh端口号
  14. 什么是霍尔推进器?只能推动一张纸,却成为多国追捧的黑科技
  15. sketch html尺寸,sketch教程 | 设置常用画板尺寸
  16. 年末去字节跳动面试,居然被面试官问的哑口无言,原因竟然是这个!!!
  17. 我理解的Java栈与堆,String类
  18. termux安装kali
  19. 深度学习项目:泰坦尼克号生存预测【附完整源码】
  20. 使用PyTorch进行知识蒸馏的代码示例

热门文章

  1. gstreamer向appsrc发送编码数据的代码
  2. 汇编proto、proc、invoke伪指令与函数声明、函数定义、函数调用
  3. 微型计算机主要特点有哪些,微型计算机的主要特点是什么呢?
  4. mysql左连接右连接内连接的含义_MySQL-解释左连接,右连接,内连接,全连接
  5. Dxg——Raspberry Pi Pico python 开发笔记整理分类合集【所有的相关记录,都整理在此】
  6. 4、http编程——setsockopt函数
  7. 说说PMO 的工作思路
  8. docker swarm英文文档学习-11-上锁你的集群来保护你的加密密钥
  9. Hibernate 缓存机制详细分析
  10. Linux 内核进程管理之进程ID【转】