HDU3572:Task Schedule【最大流】

上了一天课 心塞塞的 果然像刘老师那么说 如果你有挂科+4级没过 那基本上是WF队

题目大意:有时间补吧

思路:给每个任务向每个时间点连边容量为1 每个时间点向汇点连边 容量为机器的个数 源点向每个任务连边 容量为该任务所需时间

最后看是否满流

#include <stdio.h>

#include <iostream>

#include<queue>

#include <string.h>

#include <algorithm>

#define maxn 200000

#define maxm 1000005

#define inf 0x3f3f3f3f

using namespace std;

int next[maxn],head[maxn],flow[maxn],now,point[maxn];

int dist[maxn];

void add(int x,int y,int v)

{

next[++now]=head[x];

head[x]=now;

flow[now]=v;

point[now]=y;

next[++now]=head[y];

head[y]=now;

flow[now]=0;

point[now]=x;

}

int bfs(int s,int t)

{

queue<int>q;

q.push(s);

memset(dist,-1,sizeof(dist));

dist[s]=0;

while(!q.empty())

{

int u=q.front();

q.pop();

for(int i=head[u];i;i=next[i])

{

int k=point[i];

if(dist[k]==-1 && flow[i]>0)

{

dist[k]=dist[u]+1;

q.push(k);

}

}

}

return dist[t]!=-1;

}

int dfs(int s,int d,int t)

{

if(s==t)return d;

int res=0;

for(int i=head[s];i&&res<d;i=next[i])

{

int u=point[i];

if(flow[i]&&dist[u]==dist[s]+1)

{

int dd=dfs(u,min(flow[i],d-res),t);

if(dd)

{

flow[i]-=dd;

flow[((i-1)^1)+1]+=dd;

res+=dd;

}

}

}

if(res==0)dist[s]=-1;

return res;

}

int main()

{

int t,n,m,x,y,v,cas=1;

scanf("%d",&t);

while(t--)

{

int s=maxn-2,t=maxn-3,ans=0,maxy=0,sum=0;

now=0;

memset(head,0,sizeof(head));

scanf("%d%d",&n,&m);

for(int i=1;i<=n;i++)

{

scanf("%d%d%d",&v,&x,&y);

maxy=max(maxy,y);

for(int j=x;j<=y;j++)add(i,n+j+1,1);

add(s,i,v);

sum+=v;

}

for(int i=1;i<=maxy;i++)add(n+i+1,t,m);

while(bfs(s,t))

ans+=dfs(s,inf,t);

printf("Case %d: ",cas++);

if(ans==sum)printf("Yes\n\n");else printf("No\n\n");

}

return 0;

}

时间: 2024-10-13 22:36:17

HDU3572:Task Schedule【最大流】的相关文章

HDU3572 Task Schedule 【最大流】

Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4003    Accepted Submission(s): 1347 Problem Description Our geometry princess XMM has stoped her study in computational geometry t

hdu 3572 Task Schedule 最大流 Dinic算法,,卡时间。。建图非常有讲究

Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4617    Accepted Submission(s): 1513 Problem Description Our geometry princess XMM has stoped her study in computational geometry t

HDU 3572 Task Schedule (最大流)

C - Task Schedule Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3572 Description Our geometry princess XMM has stoped her study in computational geometry to concentrate on her newly opened fac

HDU3572 Task Schedule(ISAP)

学了几天的网络流,感觉还是ISAP算法比较实用,用这道题整理了一下,可以当作模版 题意:给出n个任务+m台机器,还有一个任务处理时限+开始时间+结束时间,一个时刻里一台机器只能处理一个任务,但是一个任务可以在不同机器处理,问能否处理完所有任务? 方法:最大流.这个题的建图算是经典,因为限定每个时刻每台机器只能处理一个任务,所以可以把时间点分配给各个合法的机器...具体是先设定一个超 级源点S(我设为0这个点),连向各个任务,容量为该任务所需时间,各个任务连向在范围内的时间点,容量为1,所有时间点

hdu-3572 Task Schedule---最大流判断满流+dinic算法

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3572 题目大意: 给N个任务,M台机器.每个任务有最早才能开始做的时间S,deadline E,和持续工作的时间P.每个任务可以分段进行,但是在同一时刻,一台机器最多只能执行一个任务. 问存不存在可行的工作时间. 解题思路: 由于时间<=500且每个任务都能断断续续的执行,那么我们把每一天时间作为一个节点来用网络流解决该题. 建图: 源点s(编号0), 时间1-500天编号为1到500, N个任务

Task Schedule(Hdu3572网络流)

跟着风神学图论 Task Schedule(Hdu3572网络流) 题意: 有一个工厂最近新近了一批机器人,这些机器人被用来解决若干个任务.每个任务都有完成所需的时间pi和规定了必须在si天或者si天之后才能处理这个任务,且需要在ei天之内完成. 工厂规定每个机器人每天只能处理一个任务,且每个任务最多只能由一个机器处理. 问这些机器人能否在顺利完成这些任务. 题解: 网络流建模. 对于每一个任务来说,它必须要在si到ei天之间被处理. 并且要在pi天以内完成. 所以我们可以把每一天当成点来考虑,

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

Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7753    Accepted Submission(s): 2381 Problem Description Our geometry princess XMM has stoped her study in computational geometry t

hdu 3572 Task Schedule(最大流)

hdu 3572 Task Schedule Description Our geometry princess XMM has stoped her study in computational geometry to concentrate on her newly opened factory. Her factory has introduced M new machines in order to process the coming N tasks. For the i-th tas

hdoj 3572 Task Schedule【最大流】

题目:hdoj 3572 Task Schedule 题意:有m台机器和n个任务,然后给出每个任务的开始时间和结束时间以及需要的天数,让你判断有没有这样条件的安排 分析:网络流题目,比较难想到的是把时间区间怎么在图里面建,其实是在这个区间的每个点都连一条边,建图方案. 超级源点s到每个任务 i 连边,容量为第 i 个任务需要的天数,然后每个任务向满足要求的日期连一条容量为1的边,即从开始到结束都连,然后所有日期到汇点连容量m的边,因为每个机器最多同时能够做m个task. 这样建图发现图中的点最多