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

看了kuangbin大佬的思路,还用着kuangbin板子orz   http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. const int MAXN = ;
  6. const int MAXM = ;
  7. const int INF = 0x3f3f3f3f;
  8. struct Edge
  9. {
  10. int to,next,cap,flow;
  11. } edge[MAXM];
  12. int tol;
  13. int head[MAXN];
  14. int gap[MAXN],dep[MAXN],pre[MAXN],cur[MAXN];
  15. void init()
  16. {
  17. tol = ;
  18. memset(head,-,sizeof(head));
  19. }
  20. void addedge(int u,int v,int w,int rw=)
  21. {
  22. edge[tol].to = v;
  23. edge[tol].cap = w;
  24. edge[tol].next = head[u];
  25. edge[tol].flow = ;
  26. head[u] = tol++;
  27. edge[tol].to = u;
  28. edge[tol].cap = rw;
  29. edge[tol].next = head[v];
  30. edge[tol].flow = ;
  31. head[v]=tol++;
  32. }
  33. int sap(int start,int end,int N)
  34. {
  35. memset(gap,,sizeof(gap));
  36. memset(dep,,sizeof(dep));
  37. memcpy(cur,head,sizeof(head));
  38. int u = start;
  39. pre[u] = -;
  40. gap[] = N;
  41. int ans = ;
  42. while(dep[start] < N)
  43. {
  44. if(u == end)
  45. {
  46. int Min = INF;
  47. for(int i = pre[u]; i != -; i = pre[edge[i^].to])
  48. if(Min > edge[i].cap - edge[i].flow)
  49. Min = edge[i].cap - edge[i].flow;
  50. for(int i = pre[u]; i != -; i = pre[edge[i^].to])
  51. {
  52. edge[i].flow += Min;
  53. edge[i^].flow -= Min;
  54. }
  55. u = start;
  56. ans += Min;
  57. continue;
  58. }
  59. bool flag = false;
  60. int v;
  61. for(int i = cur[u]; i != -; i = edge[i].next)
  62. {
  63. v = edge[i].to;
  64. if(edge[i].cap - edge[i].flow && dep[v]+ == dep[u])
  65. {
  66. flag = true;
  67. cur[u] = pre[v] = i;
  68. break;
  69. }
  70. }
  71. if(flag)
  72. {
  73. u = v;
  74. continue;
  75. }
  76. int Min = N;
  77. for(int i = head[u]; i != -; i = edge[i].next)
  78. if(edge[i].cap - edge[i].flow && dep[edge[i].to] < Min)
  79. {
  80. Min = dep[edge[i].to];
  81. cur[u] = i;
  82. }
  83. gap[dep[u]]--;
  84. if(!gap[dep[u]])return ans;
  85. dep[u] = Min+;
  86. gap[dep[u]]++;
  87. if(u != start) u = edge[pre[u]^].to;
  88. }
  89. return ans;
  90. }
  91.  
  92. int main()
  93. {
  94. int n,F,D;
  95. scanf("%d%d%d",&n,&F,&D);
  96. init();
  97. for (int i=;i<n;i++) addedge(i,i+n,);
  98. for (int i=;i<n;i++)
  99. {
  100. int f,d;
  101. scanf("%d%d",&f,&d);
  102. for (int j=;j<f;j++)
  103. {
  104. int x;
  105. scanf("%d",&x);
  106. x--;
  107. addedge(n+n+x,i,);
  108. }
  109. for (int j=;j<d;j++)
  110. {
  111. int x;
  112. scanf("%d",&x);
  113. x--;
  114. addedge(n+i,n+n+F+x,);
  115. }
  116. }
  117. for (int i=;i<F;i++) addedge(n+n+F+D,n+n+i,);
  118. for (int i=;i<D;i++) addedge(n+n+F+i,n+n+F+D+,);
  119. printf("%d",sap(n+n+F+D,n+n+F+D+,n+n+F+D+));
  120. return ;
  121. }

[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 #include <cstdio> #include <cmath> #include <algo ...

  3. TTTTTTTTTTTT POJ 2112 奶牛与机器 多重二分匹配 跑最大流 建图很经典!!

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 15682   Accepted: 5597 ...

  4. Fixed Partition Memory Management UVALive - 2238 建图很巧妙 km算法左右顶点个数不等模板以及需要注意的问题 求最小权匹配

    /** 题目: Fixed Partition Memory Management UVALive - 2238 链接:https://vjudge.net/problem/UVALive-2238 ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Python的scrapy之爬取豆瓣影评和排名

    基于scrapy框架的爬影评 爬虫主程序: import scrapy from ..items import DoubanmovieItem class MoviespiderSpider(scra ...

  2. 笨方法学python之import sys与from sys import argv的区别

    这是在网上看到的一个大神的解答: sys is a module that contains “system functionality”. sys.argv is a list containing ...

  3. 【转】mybatis调用mssql有输入输出参数那种..

    吐槽下,百度的搜索能力真心垃圾(有可能是我没想好关键词的缘故吧..)... 谷歌中国程序员呼唤你... 这面这边文章是别人的,感觉不错,转过来. http://lohasle.iteye.com/bl ...

  4. PHP.46-TP框架商城应用实例-后台21-权限管理-权限和角色的关系

    权限和角色的关系 权限功能 角色功能 权限与角色的关联要通过权限-角色表进行{多对多} /********* 角色-权限表 *********/ drop if exists p39_role_pri ...

  5. .NET基础知识之八——深拷贝,浅拷贝

    目录 1.概念 2.使用赋值符号"=" 3.浅复制 4.深复制 5.问题一:如果类里面嵌套有多个类,然后嵌套类里面又嵌套类,那么像上面实现深拷贝的方法还能用吗? 6.问题二:实现深 ...

  6. vue整合mui

    步骤1:下载https://github.com/dcloudio/mui   步骤2:将下载来的包中的dist文件夹 放到vue项目的assets中 步骤3:修改webpack配置 找到build下 ...

  7. json 处理日期格式

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date createT ...

  8. bugku 字符正则

    字符?正则? <?php highlight_file('2.php'); $key='KEY{********************************}'; $IM= preg_mat ...

  9. 关于redis一些问题记录

    问题一:启动redis时出现警告,使用下列命令(已解决) 问题二:启动时,需要解决的警告(未解决) 问题三:使用自己的配置文件启动redis时,可能会遇到: Could not connect to ...

  10. python基础训练营03——字典、集合、判断、循环

    一.字典dict: 相比列表list而言,列表list像一本书,如果要查书中的某一个内容,需要把书从前往后翻一遍,直到找到想要获取的东西:而字典dict,就像现实中的字典一样,通过查找特定的字或者词( ...