HDU 2883 kebab

题目链接

题意:有一个烧烤机,每次最多能烤 m 块肉。如今有 n 个人来买烤肉,每一个人到达时间为 si。离开时间为 ei,点的烤肉数量为 ci,每一个烤肉所需烘烤时间为 di。注意一个烤肉能够切成几份来烤

思路:把区间每一个点存起来排序后。得到最多2 * n - 1个区间,这些就表示几个互相不干扰的时间,每一个时间内仅仅可能有一个任务器做。这样建模就简单了。源点连向汇点,容量为任务须要总时间,区间连向汇点,容量为区间长度。然后每一个任务假设包括了某个区间,之间就连边容量无限大。最后推断一下最大流是否等于总任务须要时间就可以

代码:

#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;const int MAXNODE = 1005;
const int MAXEDGE = 200005;typedef int Type;
const Type INF = 0x3f3f3f3f;struct Edge {int u, v;Type cap, flow;Edge() {}Edge(int u, int v, Type cap, Type flow) {this->u = u;this->v = v;this->cap = cap;this->flow = flow;}
};struct Dinic {int n, m, s, t;Edge edges[MAXEDGE];int first[MAXNODE];int next[MAXEDGE];bool vis[MAXNODE];Type d[MAXNODE];int cur[MAXNODE];vector<int> cut;void init(int n) {this->n = n;memset(first, -1, sizeof(first));m = 0;}void add_Edge(int u, int v, Type cap) {edges[m] = Edge(u, v, cap, 0);next[m] = first[u];first[u] = m++;edges[m] = Edge(v, u, 0, 0);next[m] = first[v];first[v] = m++;}bool bfs() {memset(vis, false, sizeof(vis));queue<int> Q;Q.push(s);d[s] = 0;vis[s] = true;while (!Q.empty()) {int u = Q.front(); Q.pop();for (int i = first[u]; i != -1; i = next[i]) {Edge& e = edges[i];if (!vis[e.v] && e.cap > e.flow) {vis[e.v] = true;d[e.v] = d[u] + 1;Q.push(e.v);}}}return vis[t];}Type dfs(int u, Type a) {if (u == t || a == 0) return a;Type flow = 0, f;for (int &i = cur[u]; i != -1; i = next[i]) {Edge& e = edges[i];if (d[u] + 1 == d[e.v] && (f = dfs(e.v, min(a, e.cap - e.flow))) > 0) {e.flow += f;edges[i^1].flow -= f;flow += f;a -= f;if (a == 0) break;}}return flow;}Type Maxflow(int s, int t) {this->s = s; this->t = t;Type flow = 0;while (bfs()) {for (int i = 0; i < n; i++)cur[i] = first[i];flow += dfs(s, INF);}return flow;}void MinCut() {cut.clear();for (int i = 0; i < m; i += 2) {if (vis[edges[i].u] && !vis[edges[i].v])cut.push_back(i);}}
} gao;const int N = 405;int n, m;struct Man {int l, r;
} man[N];int p[N], pn;int s, nu, e, t;int main() {while (~scanf("%d%d", &n, &m)) {gao.init(3 * n + 2);pn = 0;int sum = 0;for (int i = 1; i <= n; i++) {scanf("%d%d%d%d", &s, &nu, &e, &t);man[i].l = s; man[i].r = e;p[pn++] = s; p[pn++] = e;sum += nu * t;gao.add_Edge(0, i, nu * t);}sort(p, p + pn);for (int i = 1; i < pn; i++)gao.add_Edge(n + i, 3 * n + 1, (p[i] - p[i - 1]) * m);for (int i = 1; i <= n; i++) {for (int j = 1; j < pn; j++) {if (p[j - 1] > man[i].r) break;if (man[i].l <= p[j - 1] && man[i].r >= p[j])gao.add_Edge(i, j + n, INF);}}printf("%s\n", gao.Maxflow(0, 3 * n + 1) ==  sum ? "Yes" : "No");}return 0;
}

HDU 2883 kebab(最大流)相关推荐

  1. HDU 2883 kebab(离散化+最大流)

    题意:给定n个顾客,第i号顾客在si到达,点了ni个羊肉串,每个羊肉串需要ti个时间烤好.顾客想要在ei得到,一个烤炉只烤m串.问你是否能满足所有顾客的要求?能的话输出"Yes", ...

  2. hdu 2883 kebab 网络流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2883 Almost everyone likes kebabs nowadays (Here a ke ...

  3. hdu 4292 Food 最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4292 You, a part-time dining service worker in your c ...

  4. hdu 3572(最大流)

    建图:把每个任务和每一天都看做一个点,添加源点和汇点.源点与每个任务之间连一条边,容量为完成该任务所需处理次数.若第i个任务可以在Si至Ei天处理,则由该任务向这些天分别连一条边,容量为1,表示此任务 ...

  5. hdu 1532(最大流)

    解题思路: 这是一道典型的模板题,直接套用EK算法即可...我感觉最大流的本质就是能否找到一个从源点到汇点的增广路径,并将其最小的边作为增加值,沿着增广路上的边进行更新. AC: #include&l ...

  6. HDU - 3126 Nova(最大流+二分+简单几何)

    题目链接:点击查看 题目大意:给出一个二维平面坐标系,其中有n个巫师,m个敌人,以及k棵树,规定每个巫师都有一个攻击范围,可以攻击以巫师为圆心,以攻击范围为半径,形成的圆内的所有敌人,对于每棵树都有一 ...

  7. HDU - 4292 Food(最大流+思维建边)

    题目链接:点击查看 题目大意:作为食堂管理人,现在有n个学生需要打饭,每个学生需要一个饮料和食物才能满足,每个学生可以同时接受多种不同的食物和饮料,现在给出每种食物和饮料的个数,问最多能让多少学生满足 ...

  8. hdu 4322 最大费用流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4322 #include <cstdio> #include <cstring> ...

  9. HDU 4411 Arrest 费用流

    题目描述: Description There are (N+1) cities on TAT island. City 0 is where police headquarter located. ...

  10. hdu 4411 Arrest 费用流模板

    题意:警察局在0点,里面有k个警察,要将1-n的贼窝一网打尽,这1+n个点都有距离,且要求抓 i 点的贼前保证已经抓光 比i小的贼.警察们最后要回到0点,问满足抓到所以的贼(题目保证可行)最少走的路之 ...

最新文章

  1. EJB_消息驱动发展bean
  2. 深入浅出数据仓库中SQL性能优化之Hive篇
  3. 使用代码自动打开ABAP Editor
  4. confluencejira集成_Jira Service Desk使用教程之如何将Jira Cloud与Confluence集成?
  5. .Net PetShop 4.0的缓存处理
  6. 什么是python之禅_【Python面试】你了解什么是 Python 之禅么?
  7. linux 内核编译不能打字,linux系统升级后,手动编译的kernel无法启动问题
  8. 郊寒岛瘦 —— 太平洋的小岛
  9. pymc3学生成绩分析和预测(补充+翻译)
  10. 摄影测量(tip1):空间前方交会与空间后方交会
  11. 关于WM_COMMAND与WM_NOTIFY
  12. Java Service Wrapper将java程序设置为服务
  13. appollo-参考线平滑设定
  14. Python编程:从入门到退学(bushi)第二章
  15. python数组中最大元素_Python获取numpy数组中最大的5个元素(保持原顺序)
  16. 线程与进程之间的共享资源
  17. 如何有效阅读《C++ Primer》那么厚的书
  18. EasyExcel工具类封装, 做到一个函数完成简单的读取和导出
  19. 数字计算机在线用,十进制与二进制在线转换工具
  20. react路由跳转之后回到页面顶部

热门文章

  1. AC日记——幸运号码 51nod 1043
  2. iframe 模拟ajax文件上传and formdata ajax 文件上传
  3. 20140115-URL编码与解码
  4. 《修炼之道:.NET开发要点精讲》读书笔记(三)
  5. 基于消息的软件架构模型演变
  6. win10 uwp 读取保存WriteableBitmap 、BitmapImage
  7. stl_algorithm算法之排序算法
  8. spark streaming之 windowDuration、slideDuration、batchDuration​
  9. SP2010开发和VS2010专家食谱--第七章节--使用客户端对象模型
  10. 20130418定义全局变量