建图           源点  ->     每个人  ->           每段时间      ->      汇点

时间要离散化一下 分成一些时间段

权                     inf    ti[i]*(time[i]-time[i-1])  m*(time[i]-time[i-1])

n人 m个机器

开始时间  总共要的数目 底线时间  每个所需时间

如果可以达到输出Y 否则N

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<string.h>
  4. #include<queue>
  5. #include<math.h>
  6.  
  7. using namespace std;
  8. #define inf 100000000
  9. #define MAXN 300
  10. #define MAXN1 200000
  11. int si[MAXN+],ni[MAXN+],ei[MAXN+],ti[MAXN+];
  12. int time[MAXN*+],S,T;
  13. int head[*MAXN];
  14. int cnt;
  15.  
  16. struct edg
  17. {
  18. int w,next,to;
  19.  
  20. }x[MAXN1+];
  21.  
  22. void add(int u,int v,int w)
  23. {
  24. x[cnt].next=head[u];
  25. x[cnt].to=v;
  26. x[cnt].w=w;
  27. head[u]=cnt++;
  28. }
  29. int vis[*MAXN];
  30.  
  31. int bfs()
  32. {
  33. memset(vis,-,sizeof(vis));
  34. vis[S]=;
  35. queue<int>q1;
  36. q1.push(S);
  37.  
  38. while(!q1.empty())
  39. {
  40. int now=q1.front();
  41. q1.pop();
  42. for(int j=head[now];j!=-;j=x[j].next)
  43. {
  44. if(vis[x[j].to]<&&x[j].w)
  45. {
  46. vis[x[j].to]=vis[now]+;
  47. q1.push(x[j].to);
  48. }
  49. }
  50. }
  51. return vis[T]!=-;
  52. }
  53. int dfs(int u,int w)
  54. {
  55. int ans=;
  56.  
  57. if(u==T)
  58. return w;
  59. int i;
  60.  
  61. for(i=head[u];i!=-;i=x[i].next)
  62. {
  63. if(vis[x[i].to]==vis[u]+&&x[i].w)
  64. {
  65. int b=dfs(x[i].to,min(w-ans,x[i].w));
  66. x[i].w-=b;
  67. x[i^].w+=b;
  68. ans=ans+b;
  69. }
  70. }
  71. return ans;
  72. }
  73. int main()
  74. {
  75. int n,m;
  76.  
  77. while(scanf("%d%d",&n,&m)!=EOF)
  78. {
  79. int i,j;
  80. int c1,sum=;
  81. cnt=;
  82.  
  83. for(i=;i<=n;i++)
  84. {
  85. scanf("%d%d%d%d",&si[i],&ni[i],&ei[i],&ti[i]);
  86. time[cnt++]=si[i];
  87. time[cnt++]=ei[i];
  88. sum=sum+ni[i]*ti[i];
  89. }
  90. sort(time,time+cnt);
  91. c1=;
  92. for(i=;i<cnt;i++)
  93. {
  94. if(time[i]!=time[i-])
  95. time[c1++]=time[i];
  96. }
  97. S=;
  98. T=n+c1+;
  99. cnt=;
  100.  
  101. memset(head,-,sizeof(head));
  102. for(i=;i<=n;i++)
  103. add(S,i,ni[i]*ti[i]),add(i,S,);
  104.  
  105. for(i=;i<c1;i++)
  106. {
  107. if(i==) //0的时候没有i-1
  108. {
  109. add(n+i+,T,m*time[i]);
  110. add(T,n+i+,);
  111. }
  112. else
  113. {
  114. add(n+i+,T,m*(time[i]-time[i-]));
  115. add(T,n+i+,);
  116. }
  117.  
  118. for(j=;j<=n;j++)
  119. {
  120. int a;
  121.  
  122. if(i==)
  123. a=;
  124. else
  125. a=time[i-];
  126. if(si[j]<=a&&time[i]<=ei[j])
  127. {
  128. add(j,n+i+,inf);
  129. add(n+i+,j,);
  130. }
  131. }
  132. }
  133. int ans=;
  134. while(bfs())
  135. ans=ans+dfs(S,inf);
  136.  
  137. if(ans>=sum)
  138. printf("Yes\n");
  139. else
  140. printf("No\n");
  141. }
  142.  
  143. return ;
  144. }

网络流HDU 2883的更多相关文章

  1. HDU 2883 kebab(最大流)

    HDU 2883 kebab 题目链接 题意:有一个烧烤机,每次最多能烤 m 块肉.如今有 n 个人来买烤肉,每一个人到达时间为 si.离开时间为 ei,点的烤肉数量为 ci,每一个烤肉所需烘烤时间为 ...

  2. 网络流 HDU 3549 Flow Problem

    网络流 HDU 3549 Flow Problem 题目:pid=3549">http://acm.hdu.edu.cn/showproblem.php?pid=3549 用增广路算法 ...

  3. hdu 2883 kebab 网络流

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

  4. 图论--网络流--最大流 HDU 2883 kebab(离散化)

    Problem Description Almost everyone likes kebabs nowadays (Here a kebab means pieces of meat grilled ...

  5. hdu 2883 kebab(时间区间压缩 &amp;&amp; dinic)

    kebab Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. HDU 2883 kebab

    kebab Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 2883 ...

  7. 网络流 HDU 3605

    建图   源点    ->   1024类人   ->   星球   ->     汇点 权             每类人数目       星球容量     星球容量 列举 0~1 ...

  8. kebab HDU - 2883(按时间段建点)

    题意: 有n个人去撸串,每个人都能决定自己的串上有几块肉,每一块肉都要花费一个单位时间才熟,烤炉一次能烤m块肉 给出每个人的起始时间.终止时间.要几串.每个串上有几块肉,问能否满足所有的人 (啥?题不 ...

  9. hdu 2883(构图+最大流+压缩区间)

    kebab Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

随机推荐

  1. BZOJ2118墨墨的等式[数论 最短路建模]

    2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1317  Solved: 504[Submit][Status][Discus ...

  2. C# 事件编程在游戏开发的应用

    2D碰撞检测:http://wenku.baidu.com/view/45544cfcfab069dc50220145.html 1.Action System.Action 等于快捷创建一个委托 2 ...

  3. java 27 - 1 反射之 类的加载器

    说到反射,首先说类的加载器. 类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载: 就是指将class文件读入内存,并为之 ...

  4. nmap脚本扫描使用总结

    nmap的脚本默认目录为:/usr/share/nmap/scripts/ Nmap提供的命令行参数如下 -sC: 等价于--script=default,使用默认类别的脚本进行扫描 可更换其他类别 ...

  5. html页面实现自动刷新的几种方法

    使用场景: 1. 页面需要定时刷新,实时加载数据(H5中的WebSocket和SSE可以实现局部刷新) 2. 一定时间之后跳转到指定页面(登录注册之类) 3. 前端开发使用伪数据调试html页面(修改 ...

  6. LinkedList子类与Queue接口

    LinkedList表示的是一个链表的操作类.定义如下: public class LinkedList<E> extends AbstractSequentialList<E> ...

  7. O(1) 查询gcd

    我们来安利一个黑科技.(其实是Claris安利来的 比如我现在有一坨询问,每次询问两个不超过n的数的gcd. n大概1kw,询问大概300w(怎么输入就不是我的事了,大不了交互库 http://mim ...

  8. 如何将matlab画出的图片保存为要求精度

    · 来源:http://emuch.net/bbs/viewthread.php?tid=2705843 杂志社对投稿图片的分辨率通常有如下要求: TIFF: Colour or greyscale ...

  9. C# Winform应用程序占用内存较大解决方法整理(转)

    原文:http://www.jb51.net/article/56682.htm 背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂 ...

  10. noip2008 双栈排序

    题目描述 Description \(Tom\)最近在研究一个有趣的排序问题.如图所示,通过\(2\)个栈\(S_1\)和\(S_2\),\(Tom\)希望借助以下\(4\)种操作实现将输入序列升序排 ...