题目链接:http://poj.org/problem?id=3281

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <cstring>
  6. #include <queue>
  7. #include <vector>
  8.  
  9. #define maxn 105
  10. #define maxe 20000
  11. using namespace std;
  12.  
  13. const int INF = 0x3f3f3f;
  14.  
  15. struct Edge{
  16. int u,v,flow,cap;
  17. int next;
  18. Edge(int u=,int v=,int flow=,int cap=,int next=):
  19. u(u),v(v),flow(flow),cap(cap),next(next) { }
  20. };
  21.  
  22. struct Dinic{
  23. int s,t;
  24. int d[maxn];
  25. int cur[maxn];
  26. bool vis[maxn];
  27. Edge edges[maxe];
  28. int head[maxn],cnt;
  29.  
  30. void init(){
  31. memset(head,-,sizeof(head));
  32. cnt = ;
  33. }
  34.  
  35. void addedge(int u,int v,int cap){
  36. edges[cnt] = Edge(u,v,,cap,head[u]);
  37. head[u] = cnt++;
  38. edges[cnt] = Edge(v,u,,,head[v]);
  39. head[v] = cnt++;
  40. }
  41.  
  42. bool bfs(){
  43. memset(vis,,sizeof(vis));
  44. queue<int> Q;
  45. Q.push(s);
  46. vis[s] = true;
  47. d[s] = ;
  48. while(!Q.empty()){
  49. int u = Q.front(); Q.pop();
  50. for(int i=head[u];i!=-;i=edges[i].next){
  51. Edge& e = edges[i];
  52. if(!vis[e.v] && e.cap > e.flow){
  53. vis[e.v] = true;
  54. d[e.v] = d[e.u] + ;
  55. Q.push(e.v);
  56. }
  57. }
  58. }
  59. return vis[t];
  60. }
  61.  
  62. int dfs(int u,int res){
  63. if(u == t || res == ) return res; //res 残流大小;
  64. int flow = ,f;
  65. for(int& i=cur[u];i!=-;i=edges[i].next){
  66. Edge& e = edges[i];
  67. if(d[e.v] == d[e.u] + && (f = dfs(e.v,min(res,e.cap-e.flow))) > ){
  68. e.flow += f;
  69. edges[i^].flow -= f;
  70. flow += f;
  71. res -= f;
  72. if(res == ) break;
  73. }
  74. }
  75. return flow;
  76. }
  77.  
  78. int MaxFlow(int s_,int t_){
  79. s = s_; t = t_;
  80. int flow = ;
  81. while(bfs()){
  82. for(int i=s;i<=t;i++) cur[i] = head[i];
  83. flow += dfs(s,INF);
  84. }
  85. return flow;
  86. }
  87. }solver;
  88.  
  89. int main()
  90. {
  91. //freopen("E:\\acm\\input.txt","r",stdin);
  92. solver.init();
  93. int N,F,D;
  94. cin>>N>>F>>D;
  95. int s = , t = F+*N+D+;
  96. for(int i=;i<=F;i++) solver.addedge(s,i,);
  97. for(int i=;i<=N;i++) solver.addedge(F+i,F+N+i,);
  98. for(int i=;i<=D;i++) solver.addedge(F+*N+i,t,);
  99. for(int i=;i<=N;i++){
  100. int food,drink,temp;
  101. cin>>food>>drink;
  102. for(int j=;j<=food;j++){
  103. cin>>temp;
  104. solver.addedge(temp,F+i,);
  105. }
  106. for(int j=;j<=drink;j++){
  107. cin>>temp;
  108. solver.addedge(F+N+i,F+*N+temp,);
  109. }
  110. }
  111. printf("%d\n",solver.MaxFlow(s,t));
  112. }

poj 3281 最大流建图的更多相关文章

  1. poj 3281 最大流+建图

    很巧妙的思想 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html 本题能够想到用最大流做,那真的是太绝了.建模的方法很 ...

  2. [poj 3281]最大流+建图很巧妙

    题目链接:http://poj.org/problem?id=3281 看了kuangbin大佬的思路,还用着kuangbin板子orz   http://www.cnblogs.com/kuangb ...

  3. 图论--网络流--最大流--POJ 3281 Dining (超级源汇+限流建图+拆点建图)

    Description Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, an ...

  4. poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙

    /** 题目:poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙 链接:http://poj.org/problem?id=3680 题意:给定n个区间,每个区间(ai,bi ...

  5. hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙

    /** 题目:hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4106 ...

  6. 图论--网络流--最小割 HDU 2485 Destroying the bus stations(最短路+限流建图)

    Problem Description Gabiluso is one of the greatest spies in his country. Now he's trying to complet ...

  7. poj 3281 Dining 网络流-最大流-建图的题

    题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱) ...

  8. poj 2135 Farm Tour 最小费用最大流建图跑最短路

    题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...

  9. poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新

    题目大意:是有M个猪圈,N个顾客,顾客要买猪,神奇的是顾客有一些猪圈的钥匙而主人MIRKO却没有钥匙,多么神奇?顾客可以在打开的猪圈购买任意数量的猪,只要猪圈里有足够数量的猪.而且当顾客打开猪圈后mi ...

随机推荐

  1. 最简单的基于FFmpeg的推流器(以推送RTMP为例)

    ===================================================== 最简单的基于FFmpeg的推流器系列文章列表: <最简单的基于FFmpeg的推流器(以 ...

  2. JAVA 环境变量

    Java是由Sun公司开发的一种应用于分布式网络环境的程序设计语言,Java语言拥有跨平台的特性,它编译的程序能够运行在多种操作系统平台上,可以实现“一次编写,到处运行”的强大功能. 工具/原料 JD ...

  3. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  4. Qt Creator编译问题

    有时候需要自己编译Qt Creator,需要注意的就是qmake版本的问题,比如我用4.8.1和4.8.6同样编译出来的Qt Creator在同样的qtconfig-qt4下所呈现的效果是不一样的. ...

  5. Spring(一)简述(转载)

    原文出自:http://www.cnblogs.com/liunanjava/p/4396794.html 一.Spring简述 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量 ...

  6. 总结几种C#窗体间通讯的处理方法

    摘要:本文介绍了C#窗体间通讯的几种处理方法,即传值.继承.事件回调,希望对大家有用. http://www.cnblogs.com/jara/p/3439603.html 应用程序开发中,经常需要多 ...

  7. Library:python-memcached on Windows

    1 install memcached 1.4.4 Windows 32-bit  2 cd into the base file and type memcached.exe -d install ...

  8. Mosquitto-MQTT

    安装Mosquitto #To use the new repository you should first import the repository package signing key: w ...

  9. 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)

    原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...

  10. 转: 静态模式makefile中$(cobjs): $(obj)/%.o: $(src)/%.c

    4.12 静态模式静态模式规则是这样一个规则:规则存在多个目标,并且不同的目标可以根据目标文件的名字来自动构造出依赖文件.静态模式规则比多目标规则更通用,它不需要多个目标具有相同的依赖.但是静态模式规 ...