很简单的任务调度模板题

把一个工作完成一天的量当做是边

/*
任务调度问题最大流
因为两个任务之间是没有关系的,两天之间也是没有关系的
所以抽象成二分图
任务i在天数[si,ei]之间都连一条双向边,权值为1,表示一天一个任务最多只能完成一个任务点
建立超级源点s,和所有的任务连双向边,权值为pi,表示需要pi天来完成任务
建立超级汇点t,和所有的天数连双向边,权值为m,表示这一天最多完成的任务贡献点
如果最大流是sum{pi} 就是可行,反之不行
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
#define inf 0x3f3f3f3f
struct Task{int s,e,p;}u[maxn];
struct Edge{int to,nxt,w;}e[maxn<<];
int head[maxn],T,tot,n,m,w,N,M,s,t;
void init(){memset(head,-,sizeof head);tot=;}
void add(int u,int v,int w){
e[tot].to=v;e[tot].w=w;e[tot].nxt=head[u];head[u]=tot++;
} int d[maxn];
bool bfs(){//在残量网络上构造分层图
memset(d,,sizeof d); queue<int>q;
while(q.size())q.pop();
q.push(s);d[s]=; while(q.size()){
int x=q.front();q.pop();
for(int i=head[x];i!=-;i=e[i].nxt){
int y=e[i].to;
if(d[y] || e[i].w==)continue;
q.push(y);
d[y]=d[x]+;
if(y==t)return ;
}
}
return ;
}
int dinic(int x,int flow){
if (x==t)return flow;
int rest=flow;
for(int i=head[x];i!=- && rest>;i=e[i].nxt){
int y=e[i].to;
if(e[i].w== || d[y]!=d[x]+)continue;
int k=dinic(y,min(rest,e[i].w));
if(!k) d[y]=; //y点已经被增广完毕,本次dinic时不会再访问这个点
e[i].w-=k; e[i^].w+=k;
rest-=k;
}
return flow-rest;
} int main(){
cin>>T;
for(int tt=;tt<=T;tt++){
init();
cin>>N>>M;
int Max=,sum=;//最晚完成的天数
for(int i=;i<=N;i++){
cin>>u[i].p>>u[i].s>>u[i].e;
Max=max(Max,u[i].e);
sum+=u[i].p;
} //建图
n=Max+N;//点数
for(int i=;i<=N;i++){
for(int j=u[i].s;j<=u[i].e;j++){
add(i,j+N,);add(j+N,i,);
}
}
s=n+;t=n+;
for(int i=;i<=N;i++){
add(s,i,u[i].p);add(i,s,);
}
for(int i=N+;i<=n;i++){
add(i,t,M);add(t,i,);
} int flow=,ans=;
while(bfs())
while(flow=dinic(s,inf))
ans+=flow;
if(ans==sum)
printf("Case %d: Yes\n",tt);
else printf("Case %d: No\n",tt);
puts("");
}
}

最新文章

  1. Java Business Process Management(业务流程管理) 初识环境搭建
  2. Codeforces Round #234A
  3. nodejs 中自定义事件
  4. 零配置简单搭建SpringMVC 项目
  5. 61-umask 简明笔记
  6. Apache模块 mod_proxy 转自http://www.php100.com/manual/apache2/mod/mod_proxy.html
  7. mongodb 教程一
  8. (转)javascript组件开发方式
  9. myeclipse设置以及快捷键
  10. TP5模型关联问题
  11. HTML5原生拖拽/拖放(drag &amp; drop)详解
  12. 主机管理+堡垒机系统开发:strace命令用法详解(六)
  13. nginx反向代理(动静分离)
  14. Android-仿“抖音”的评论列表的UI和效果
  15. 在Debian系中快速有效的安装oracle-java
  16. 洛谷P2178 品酒大会【后缀数组】【单调栈】
  17. License分类 + 引入开源软件时License的注意事项
  18. JavaScript判断对象是否是NULL(转)
  19. (二)Mybatis项目配置
  20. [教程]Ubuntu下完整配置自动壁纸切换

热门文章

  1. ubuntu安装WPS替代office
  2. g++优化开关(暴力必备)
  3. BIO、NIO和AIO
  4. leetcood学习笔记-107-二叉树的层次遍历二
  5. Android Android Studio 如何导出 Jar 给 Unity 使用
  6. javascript基础总结之实例(一)
  7. 返回字符串中最长连续相同字串的长度---正则实现与JavaScript实现
  8. 39 Ubuntu下配置python的vscode开发环境
  9. C++——函数模板和类模板
  10. NX二次开发-UFUN获取圆柱的参数UF_MODL_ask_cylinder_parms