最大流任务调度——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 ...
随机推荐
- CR0 - CR4 ,5个寄存器,留念,每次都要翻手册,太费事了
- C语言结构体注意点
#include <stdio.h> int main() { /*************************************************** *定义结构体变量的 ...
- oh my zsh 如何启用插件
注 根据自己的需求启用插件.但是,插件具体实现什么功能就得自己看啦. 官网说明 实践 其实默认oh my zsh(以下简称zsh)已经在安装的时候就帮我们下载好了所有插件,只不过需要用户自己选择启用哪 ...
- PHP之如何编写一个Vue的API后台(一)
首先我们先建立文件的结构 如下图: components - 存放所有的全局方法,比如:autoplay的函数 lib - 所有第三方的方法 比如:DBTool:数据库的方法 logs - 日志 ...
- iOS录音后播放声音变小的解决方法
目前需求是录音之后再播放出来.经常会出现播放声音变很小的情况. 解决方法: if (recorder.recording){ [recorder stop]; } [[AVAudioSession s ...
- EE5111_A0206839W
EE5111 Selected Topics in Industrial Control & Instrumentation Assessment: Implement a simple ...
- Linux常用命令大全(很全面)
最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大.我将我了解到的命令列举一 ...
- 对A盾原理的小小总结,膜拜A神
A盾的原理是在驱动加载时重载os内核,获取原始ssdt表的地址. 应用层点击查询的代码在文件A-ProtectView.cpp中,每种点击操作调用相应的 query查询函数,在query函数里 Rea ...
- Mybatis笔记 - SqlMapConfig
一.基本配置内容 1.基本格式 mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) typeAliases(类 ...
- CometOJ Contest #3 C
题目链接:https://cometoj.com/contest/38/problem/C?problem_id=1542&myself=0&result=0&page=1&a ...