题目链接:http://acm.hdu.edu.cn/showproblem.php?

pid=3572

题意:m台机器。须要做n个任务。

第i个任务。你须要使用机器Pi天,且这个任务要在[Si  ,  Ei]区间内完毕才有效。

对于一个任务,仅仅能由一个机器来完毕。一个机器同一时间仅仅能做一个任务。

当然,一个任务能够分成几段不连续的时间来完毕。问,是否能做完所有任务。

题意非常清晰。也就是推断是否是满流。

对于网络流问题,模板大家都有,关键在于怎样建图(详见资料

思路:今天问了龙哥,对建图有了一定的了解,建图分为4部分,源点->X集合->Y集合->汇点(X、Y类似于二分匹配图)。确定这个4个部分后,就是找这个4个部分的关系,也就是构建容量网络

这题的X集合能够当做任务编号。Y集合当做天数(第几天)

某任务->某一天。若是能够在这天做任务。建一条容量为1的边,最后,把每天到汇点再建一条边容量M(表示每台机器最多工作M个任务)即最大容量是M。

以第二组实例作图(真挫。。)

模板应用的是ISAP(可当做模板)。个人非常倾向ISAP

Accepted 2292 KB 62 ms C++
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <math.h>
#include <queue>
#define init(a) memset(a,0,sizeof(a))
#define PI acos(-1,0)
using namespace std;
const int maxn = 1100;
const int maxm = 400000;
#define lson left, m, id<<1
#define rson m+1, right, id<<1|1
#define min(a,b) (a>b)?b:a
#define max(a,b) (a>b)?a:b
#define MAX INT_MAX int head[maxn], sum, bnum;
int dis[maxn]; //残量网络中节点 i 到汇点 t 的最短距离
int num[maxn]; //和 t 的最短距离等于 i 的节点数量
int cur[maxn]; //当前弧下标
int pre[maxn]; //可增广路上的上一条弧的编号
struct node
{
int v, cap;
int next;
}edge[maxm];
void add(int u, int v, int cap)//加边,储存地图
{
edge[bnum].v=v;
edge[bnum].cap=cap;
edge[bnum].next=head[u];
head[u]=bnum++; edge[bnum].v = u;
edge[bnum].cap=0;
edge[bnum].next=head[v];
head[v] = bnum++;
}
void BFS(int source,int sink)//预处理。利用反向BFS。更新dis数组
{
queue<int>q;
while(q.empty()==false) q.pop();
memset(num,0,sizeof(num));
memset(dis,-1,sizeof(dis));
q.push(sink);
dis[sink]=0;
num[0]=1;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].v;
if(dis[v] == -1)
{
dis[v] = dis[u] + 1;//找同意弧
num[dis[v]]++;
q.push(v);
}
}
}
}
int ISAP(int source,int sink,int n)//n为残量网络中的节点到汇点的最大距离,通常节点的个数。即上限
{
memcpy(cur,head,sizeof(cur));
int flow=0, u = pre[source] = source;
BFS( source,sink);//更新dis数组
while( dis[source] < n )
{
if(u == sink)
{
int df = MAX, pos;
for(int i = source;i != sink;i = edge[cur[i]].v)//追踪增广路路径。最小残量df
{
if(df > edge[cur[i]].cap)
{
df = edge[cur[i]].cap;
pos = i;
}
}
for(int i = source;i != sink;i = edge[cur[i]].v) //更新流量
{
edge[cur[i]].cap -= df;
edge[cur[i]^1].cap += df;
}
flow += df;
u = pos;
}
int st;
for(st = cur[u];st != -1;st = edge[st].next)// 从当前弧開始查找同意弧
{
if(dis[edge[st].v] + 1 == dis[u] && edge[st].cap)//找到同意弧跳出
{
break;
}
}
if(st != -1)
{
cur[u] = st;
pre[edge[st].v] = u;
u = edge[st].v;
}
else
{
if( (--num[dis[u]])==0 ) break;//GAP优化,出现断层结束
int mind = n;
for(int id = head[u];id != -1;id = edge[id].next)//retreat操作:更新 dis 数组
{
if(mind > dis[edge[id].v] && edge[id].cap)
{
cur[u] = id;//改动标号的同一时候改动当前弧
mind = dis[edge[id].v];
}
}
dis[u] = mind+1;
num[dis[u]]++;
if(u!=source)
u = pre[u];// 回溯继续寻找同意弧
}
}
return flow;
}
void initt()
{
memset(head,-1,sizeof(head));
bnum=0;
} int main()
{
int T, N,M,a,b,c;
int maa, sum, source, sink, n;
scanf("%d", &T);
for (int cas = 1; cas <= T; ++cas)
{
initt();
sum = 0; source = 0; maa = 0;
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; i++)
{
scanf("%d%d%d", &a, &b, &c);
sum += a; if(c > maa) maa = c; add(source, i, a); for (int j = b; j <= c; ++j)
{
add(i, N + j, 1);
}
}
sink = N + maa + 1;
n = sink;
for (int i = 1; i <= maa; ++i)
{
add(N + i, sink, M);
} printf("Case %d: ", cas);
int ans = ISAP(source, sink, n);
if(ans==sum)
puts("Yes");
else
puts("No");
cout<<endl;
}
return 0;
}

HDU 3572 Task Schedule(ISAP模板&amp;&amp;最大流问题)的更多相关文章

  1. hdu 3572 Task Schedule (Dinic模板)

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

  2. hdu 3572 Task Schedule (dinic算法)

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

  3. HDU 3572 Task Schedule (最大流)

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

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

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

  5. hdu 3572 Task Schedule

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

  6. 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 ...

  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(限流建图,超级源汇)

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

随机推荐

  1. Elasticsearch之CURL命令的PUT和POST对比

    PUT是幂等方法,而POST并不是. PUT用于更新操作,POST用于新增操作比较合适. PUT,DELETE操作是幂等的,所谓幂等就是指不管进行多少次操作,结果都一样. 比如,我用PUT修改一篇文章 ...

  2. Java—break跳出语句

    在开发代码时,常常会产生这样的疑惑:break跳出语句是如何应用的呢? 使用break的场景有两种:一.switch语句中.二.循环语句. 这里就不介绍switch语句,主要说一下break在循环中的 ...

  3. JS——i++与++i

    先赋值后自增: var i = 0; var n1 = i++; alert(i);//返回1 alert(n1);//返回0 先自增后赋值: var i = 0; var n1 = ++i; ale ...

  4. Fast-RCNN论文翻译

    http://www.dengfanxin.cn/?p=423 原文地址 本文实现了Fast-RCNN主要部分的翻译工作,在SPPnet出来之后,同在微软的R-CNN的作者Ross迅速怼了回去,抛出了 ...

  5. LVS部分调度算法的适应场景分析

    1.轮叫调度算法(RR)假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度.该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器 ...

  6. javascript模块化编程(一)(http://www.ruanyifeng.com/blog/2012/10/javascript_module.html)

    Javascript模块化编程(一):模块的写法   随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个 ...

  7. listcontrol 加combobox

    之前写过一篇(list Control实现单元格编辑)文章,那篇文章不是很完善执行的时候有时会出错,这篇文章经过完善后还加入了Combo Box功能! 这里我就只是晒一下我的代码; 头文件: // L ...

  8. CAD向控件注册一个命令(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::Mx_RegistUserCustomCommand 向控件注册一个命令,用户在命令行输入命令名这个字符串,就会触发执行命令事件 命令 ...

  9. ImageMagick的下载和配置

    2. 新建一个VC++的工程,项目->属性 VC++目录中 包含目录中加入4项,ImageMagick安装路径下的include文件夹,和include里边的三个文件夹. 库目录中加入1项,Im ...

  10. 北京Linux运维培训怎么选?

    北京的地理优势和经济优势基本无需多言,作为全国机会最多的地方,吸引了无数的北漂前赴后继.作为中国互联网中心之一,北京有海量的运维岗位正在等待大家淘金.北京的Linux云计算培训业蓬勃发展. 云计算早已 ...