最大流任务调度——hdu3572二分图建图
很简单的任务调度模板题
把一个工作完成一天的量当做是边
/*
任务调度问题最大流
因为两个任务之间是没有关系的,两天之间也是没有关系的
所以抽象成二分图
任务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("");
}
}
最大流任务调度——hdu3572二分图建图的更多相关文章
- hdu 3572 仪器与任务 最大流 好题 体会建图思想
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- BZOJ-1927 星际竞速 最小费用最大流+拆点+不坑建图
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 1593 Solved: 967 [Submit][Statu ...
- poj1149 PIGS 最大流(神奇的建图)
一开始不看题解,建图出错了.后来发现是题目理解错了. if Mirko wants, he can redistribute the remaining pigs across the unlock ...
- HDU 1045 Fire Net 二分图建图
HDU 1045 题意: 在一个n*n地图中,有许多可以挡住子弹的墙,问最多可以放几个炮台,使得炮台不会相互损害.炮台会向四面发射子弹. 思路: 把行列分开做,先处理行,把同一行中相互联通的点缩成一个 ...
- POJ2226(二分图建图/最小点覆盖)
题意: 给定m*n的棋盘,有若干只咕咕.希望去掉一部分咕咕使得剩下的咕咕在上下左右四个方向越过咕咕槽的情况下都看不到咕咕. 思路: 建立一个二分图的方法有很多,这里采用xy二分. 假设没有咕咕槽的情况 ...
- 二分图建图,并查集求联通——二维等价性传递 cf1012B好题!
/* 模拟二分图:每个点作为一条边,连接的是一列和一行(抽象成一个点,列在左,行在右) 由题意得 a-b相连,a-c相连,b-d相连,那么d-c就不用再相连了 等价于把二分图变成联通的需要再加多少边 ...
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 726 Solved: 309[Submit][Status ...
- POJ-3020 Antenna Placement---二分图匹配&最小路径覆盖&建图
题目链接: https://vjudge.net/problem/POJ-3020 题目大意: 一个n*m的方阵 一个雷达可覆盖两个*,一个*可与四周的一个*被覆盖,一个*可被多个雷达覆盖问至少需要多 ...
- P3355 骑士共存问题 二分建图 + 当前弧优化dinic
P3355 骑士共存问题 题意: 也是一个棋盘,规则是“马”不能相互打到. 思路: 奇偶点分开,二分图建图,这道题要注意每个点可以跑八个方向,两边都可以跑,所以边 = 20 * n * n. 然后di ...
随机推荐
- Batch - call, start, goto 区别
参考(待整理): 批处理命令——call 和 start
- php 简单的工程模式 实现加法操作
class A{ protected $Num1; protected $Num2; public $result; public function getNum1(){ return $this-& ...
- 区别 |DCL |DDL |DML |DQL
DCL(Data Control Language)数据控制语言: 用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句.这个比较少用到. 对于大多数人,在公司一 ...
- Android中的Parcel机制(下)
上一篇中我们透过源码看到了Parcel背后的机制,本质上把它当成一个Serialize就可以了,只是它是在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此会更加高效. 我们接下来要说的是Pa ...
- CSDN首页> 云计算 孙玄:解析58同城典型技术架构及演变
转:http://www.csdn.net/article/2015-04-09/2824437 在UPYUN主办的“UPYUN Open Talk”第三期北京站上,58同城系统架构师孙玄详细介绍了5 ...
- Rootkit之SSDT hook(通过CR0)
CR0当中有一个写保护位,是保护内存不可写属性的,为了能够写入内核,只能把它的保护给咔嚓掉了,不过--如果做完了手脚但不还原写保护属性的话,极有可能会BOSD. /================== ...
- linux网络速率监控
#!/bin/bash #作者:fafu_li #时间: #监控网卡传输速率 source /etc/profile #加载系统环境变量 source $HOME/.bash_profile #加载用 ...
- [转]如何升级gcc版本
首先需要准备需要材料:gcc4.4.2版需要安装gmp4.2.0+和mpfr2.3.0+,到GMP的网站(http://gmplib.org/)上下载gmp-4.3.1.tar.gz 和mprf的网站 ...
- JVM内核-原理、诊断与优化学习笔记(十):Class文件结构
文章目录 语言无关性 文件结构 魔数 版本 常量池 CONSTANT_Utf8 CONSTANT_Integer CONSTANT_String CONSTANT_NameAndType CONSTA ...
- 8、collection
collection 可以理解为一个容器 组织业务逻辑 导入导出 监控或者mock server 实例: 1.新建一个collection,命名为v2ex 2.保存1个请求到v2ex 3.选中v2ex ...