最大流任务调度+离散化——hdu2883
思想就是把时间段离散化,然后用个点来表示一段时间
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include <algorithm>
- #include <math.h>
- #include <queue>
- using namespace std;
- const int N = ;
- const int INF = ;
- struct Edge{
- int v,w,next;
- }edge[N*N];
- int head[N];
- int level[N];
- int tot;
- void init()
- {
- memset(head,-,sizeof(head));
- tot=;
- }
- void addEdge(int u,int v,int w,int &k)
- {
- edge[k].v = v,edge[k].w=w,edge[k].next=head[u],head[u]=k++;
- edge[k].v = u,edge[k].w=,edge[k].next=head[v],head[v]=k++;
- }
- int BFS(int src,int des)
- {
- queue<int>q;
- memset(level,,sizeof(level));
- level[src]=;
- q.push(src);
- while(!q.empty())
- {
- int u = q.front();
- q.pop();
- if(u==des) return ;
- for(int k = head[u]; k!=-; k=edge[k].next)
- {
- int v = edge[k].v;
- int w = edge[k].w;
- if(level[v]==&&w!=)
- {
- level[v]=level[u]+;
- q.push(v);
- }
- }
- }
- return -;
- }
- int dfs(int u,int des,int increaseRoad){
- if(u==des||increaseRoad==) return increaseRoad;
- int ret=;
- for(int k=head[u];k!=-;k=edge[k].next){
- int v = edge[k].v,w=edge[k].w;
- if(level[v]==level[u]+&&w!=){
- int MIN = min(increaseRoad-ret,w);
- w = dfs(v,des,MIN);
- if(w > )
- {
- edge[k].w -=w;
- edge[k^].w+=w;
- ret+=w;
- if(ret==increaseRoad) return ret;
- }
- else level[v] = -;
- if(increaseRoad==) break;
- }
- }
- if(ret==) level[u]=-;
- return ret;
- }
- int Dinic(int src,int des)
- {
- int ans = ;
- while(BFS(src,des)!=-) ans+=dfs(src,des,INF);
- return ans;
- }
- int n,m;
- int s[N],num[N],e[N],t[N];
- int time[N];
- int main()
- {
- while(scanf("%d%d",&n,&m)!=EOF){
- init();
- int k = ;
- int sum = ;
- for(int i=;i<=n;i++){
- scanf("%d%d%d%d",&s[i],&num[i],&e[i],&t[i]);
- sum += num[i]*t[i];
- time[++k] = s[i];
- time[++k] = e[i];
- }
- sort(time+,time+k+);
- int cnt = ;
- for(int i=;i<=k;i++){
- if(time[i]==time[i-]) continue;
- time[++cnt] = time[i];
- }
- int src = ,des = n+cnt+;
- for(int i=;i<=n;i++){
- addEdge(src,i,num[i]*t[i],tot);
- }
- for(int i=;i<=n;i++){
- for(int j=;j<=cnt;j++){
- if(s[i]<=time[j-]&&time[j]<=e[i]){
- addEdge(i,n+j,INF,tot);
- }
- }
- }
- for(int i=;i<=cnt;i++){
- addEdge(n+i,des,(time[i]-time[i-])*m,tot);
- }
- if(Dinic(src,des)==sum) printf("Yes\n");
- else printf("No\n");
- }
- return ;
- }
最大流任务调度+离散化——hdu2883的更多相关文章
- 最大流任务调度——hdu3572二分图建图
很简单的任务调度模板题 把一个工作完成一天的量当做是边 /* 任务调度问题最大流 因为两个任务之间是没有关系的,两天之间也是没有关系的 所以抽象成二分图 任务i在天数[si,ei]之间都连一条双向边, ...
- 【最大流】【HDU2883】【kebab】
题意: 有一个烧烤机,每次最多能烤 m 块肉,现在有 n 个人来买烤肉,每个人到达时间为 si,离开时间为 ei,点的烤肉数量为 ci,点的烤肉所需烘烤时间为 di, 每个人要烤的肉可以分成若干份在同 ...
- HDU-6532 Chessboard 2019广东省省赛B题(费用流)
比赛场上很容易想到是费用流,但是没有想到建图方法qwq,太弱了. 这里直接贴官方题解: 费用流.离散化坐标,每行用一个点表示,每列也用一个点表示.表示第i-1行的点向表示第i行的点连边,容量为第i行及 ...
- Spark 生态系统组件
摘要: 随着大数据技术的发展,实时流计算.机器学习.图计算等领域成为较热的研究方向,而Spark作为大数据处理的“利器”有着较为成熟的生态圈,能够一站式解决类似场景的问题.那你知道Spark生态系统有 ...
- 最长k可重区间集问题
费用流,离散化后,l向r连费用为负长度的边容量为1 相邻的连容量为k的边,最好建S和T # include <bits/stdc++.h> # define RG register # d ...
- POJ 3762 The Bonus Salary!
The Bonus Salary! Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Origi ...
- CF704D Captain America
http://codeforces.com/problemset/problem/704/D 题解 对于两种颜色的染色,我们可以把它看做选择问题. 比如说红色的代价小,所以我们尽可能多的染红色. 然后 ...
- HDU2883 kebab(最大流判断满流 + 离散化 + 区间化点)
[题意]: 有一个烤箱,烤箱在一个时刻最多考M个肉串,N个顾客,每个顾客有属性s,n,e,t s是来的时间,n是想要的肉串数量,e是最晚离开的时间,t是烤的时间(几分熟). 顾客的烤肉可以分开烤,比如 ...
- Discretized Streams, 离散化的流数据处理
Discretized Streams: An Efficient and Fault-Tolerant Model for Stream Processing on Large Clusters ...
随机推荐
- layerui ios不适应问题
.admin-main {-webkit-overflow-scrolling: touch; overflow: scroll; position: absolute; left: 0; top: ...
- Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci...
最近刚接触mysql,今天用mysql插入中文字符的时候,程序报错“Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_g ...
- VC++6.0环境中输出特殊字符
该方法最靠谱:https://blog.csdn.net/xiaofeilong321/article/details/8713002 输出特殊字符需使用扩展的ASCII码. 修改控制台显示设置: ( ...
- bootstrapValidator--表单校验
关于表单校验 要依次引入 <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css"& ...
- 01退背包——bzoj2287
退背包就是限制某一件物品不可取的方案数 先做出无限制的方案数,然后对于当前不可取的物品,dp2[j]表示不取改物品情况下,取得体积为j的方案数 有状态方程 dp2[j]=dp1[j]-dp2[j-w[ ...
- hive的行列互转
行转列 多行转多列 数据表 row2col col1 col2 col3 a c 1 a d 2 a e 3 b c 4 b d 5 b e 6 现在要将其转化为: col1 c d e a 1 2 ...
- NX二次开发-UFUN获取圆锥参数UF_MODL_ask_cone_parms
NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> UF_initialize( ...
- NX二次开发-打开part对话框UF_UI_open_part
这是UFUN帮助的官方例子 /****************************************************************************** Copyri ...
- 数据结构C++版-队列
一.概念 分类: 二.补充说明 1.<面向对象的队列设计>课程问答: 首先要明确数据结构和数据存储结构的概念. 数据结构是指数据对象之间的逻辑关系,例如二叉树,队列,栈等,而数据存储结构是 ...
- Cortex-M3的异常/中断屏蔽寄存器组
转自 1. Cortex-M3的异常/中断屏蔽寄存器组 注:只有在特权级下,才允许访问这3个寄存器. 名 字 功能描述 PRIMASK 只有单一比特的寄存器.置为1后,就关掉所有可屏蔽异常,只剩下NM ...