题目链接

给你f种食物, 以及每种食物的个数, d种饮料, 以及个数, n个人, 以及每个人可以接受的食物种类和饮料种类。 每个人必须得到一种食物和一种饮料。 问最后得到满足的人的个数。

因为一个人只能得到一种食物, 所以把人拆成两个点, 之间连一条权值为1的边。 建一个源点s, 汇点t, 每种食物向源点连边, 权值为食物的个数, 饮料向汇点连边, 权值为个数。 如果一个人可以接受某种饮料, u'就向饮料连一条权值为1的边; 如果一个人可以接受某种食物, 食物就向u连权值为1的边。

每次数组都要开的很大才可以过...........

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define pb(x) push_back(x)
  4. #define ll long long
  5. #define mk(x, y) make_pair(x, y)
  6. #define lson l, m, rt<<1
  7. #define mem(a) memset(a, 0, sizeof(a))
  8. #define rson m+1, r, rt<<1|1
  9. #define mem1(a) memset(a, -1, sizeof(a))
  10. #define mem2(a) memset(a, 0x3f, sizeof(a))
  11. #define rep(i, a, n) for(int i = a; i<n; i++)
  12. #define ull unsigned long long
  13. typedef pair<int, int> pll;
  14. const double PI = acos(-1.0);
  15. const double eps = 1e-;
  16. const int mod = 1e9+;
  17. const int inf = ;
  18. const int dir[][] = { {-, }, {, }, {, -}, {, } };
  19. const int maxn = 8e4+;
  20. int head[maxn*], s, t, num, q[maxn], dis[maxn];
  21. struct node
  22. {
  23. int to, nextt, c;
  24. }e[maxn*];
  25. void init() {
  26. mem1(head);
  27. num = ;
  28. }
  29. void add(int u, int v, int c) {
  30. e[num].to = v; e[num].nextt = head[u]; e[num].c = c; head[u] = num++;
  31. e[num].to = u; e[num].nextt = head[v]; e[num].c = ; head[v] = num++;
  32. }
  33. int bfs() {
  34. int u, v, st = , ed = ;
  35. mem(dis);
  36. dis[s] = ;
  37. q[ed++] = s;
  38. while(st<ed) {
  39. u = q[st++];
  40. for(int i = head[u]; ~i; i = e[i].nextt) {
  41. v = e[i].to;
  42. if(e[i].c&&!dis[v]) {
  43. dis[v] = dis[u]+;
  44. if(v == t)
  45. return ;
  46. q[ed++] = v;
  47. }
  48. }
  49. }
  50. return ;
  51. }
  52. int dfs(int u, int limit) {
  53. if(u == t)
  54. return limit;
  55. int cost = ;
  56. for(int i = head[u]; ~i; i = e[i].nextt) {
  57. int v = e[i].to;
  58. if(e[i].c&&dis[u] == dis[v]-) {
  59. int tmp = dfs(v, min(limit-cost, e[i].c));
  60. if(tmp>) {
  61. e[i].c -= tmp;
  62. e[i^].c += tmp;
  63. cost += tmp;
  64. if(cost == limit)
  65. break;
  66. } else {
  67. dis[v] = -;
  68. }
  69. }
  70. }
  71. return cost;
  72. }
  73. int dinic() {
  74. int ans = ;
  75. while(bfs()) {
  76. ans += dfs(s, inf);
  77. }
  78. return ans;
  79. }
  80. char c[];
  81. int main()
  82. {
  83. int n, f, d, x;
  84. while(cin>>n>>f>>d) {
  85. init();
  86. s = , t = f+*n+d+;
  87. for(int i = ; i<=f; i++) {
  88. scanf("%d", &x);
  89. add(s, i, x);
  90. }
  91. for(int i = ; i<=d; i++) {
  92. scanf("%d", &x);
  93. add(f+*n+i, t, x);
  94. }
  95. for(int k = ; k<; k++) {
  96. for(int i = ; i<=n; i++) {
  97. scanf("%s", c);
  98. int len = strlen(c);
  99. for(int j = ; j<len; j++) {
  100. if(c[j]=='Y') {
  101. if(k==) {
  102. add(j+, f+i, );
  103. } else {
  104. add(f+n+i, j++f+*n, );
  105. }
  106. }
  107. }
  108. }
  109. }
  110. for(int i = ; i<=n; i++) {
  111. add(i+f, i+n+f, );
  112. }
  113. int ans = dinic();
  114. cout<<ans<<endl;
  115. }
  116. }

hdu 4292 Food 网络流的更多相关文章

  1. HDU 4292 Food (网络流,最大流)

    HDU 4292 Food (网络流,最大流) Description You, a part-time dining service worker in your college's dining ...

  2. Food HDU - 4292 网络流 拆点建图

    http://acm.hdu.edu.cn/showproblem.php?pid=4292 给一些人想要的食物和饮料,和你拥有的数量,问最多多少人可以同时获得一份食物和一份饮料 写的时候一共用了2种 ...

  3. (网络流)Food -- hdu -- 4292

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4292 Food Time Limit: 2000/1000 MS (Java/Others)    Me ...

  4. H - Food HDU - 4292 网络流

    题目   You, a part-time dining service worker in your college’s dining hall, are now confused with a n ...

  5. HDU 4292:Food(最大流)

    http://acm.hdu.edu.cn/showproblem.php?pid=4292 题意:和奶牛一题差不多,只不过每种食物可以有多种. 思路:因为食物多种,所以源点和汇点的容量要改下.还有D ...

  6. hdu 2883 kebab 网络流

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

  7. hdu 1733 分层网络流 ****

    题目大意:有一个类似于迷宫搜索的图,‘.’代表的是无人的路,'X'代表有人的点,'#'代表此点不可通过,'@'代表门口.每个位置每一秒钟只能站一个人,每个位置到上下左右点的时间为1,问你所有人能不能出 ...

  8. HDU 3452 Bonsai(网络流之最小割)

    题目地址:HDU 3452 最小割水题. 源点为根节点.再另设一汇点,汇点与叶子连边. 对叶子结点的推断是看度数是否为1. 代码例如以下: #include <iostream> #inc ...

  9. hdu 3572 Escape 网络流

    题目链接 给一个n*m的图, 里面有一些点, '.'代表空地, '#'代表墙, 不可以走, '@'代表大门, 可以有多个, 'X'代表人, 问所有人都走出大门需要的最短时间, 每一时刻一个格子只能有一 ...

随机推荐

  1. jQuery源码笔记——三

    将类数组对象转化为数组对象 javascript中有许多类数组对象,比如HTMLCollection,NodeList,arguments.她们的特点是和数组一样有length属性,并且有0,1,2这 ...

  2. Programming C#.Classes and Objects.只读字段

    只读字段 当字段声明中含有 readonly 修饰符时,该声明所引入的字段为只读字段.给只读字段的直接赋值只能作为声明的组成部分出现,或在同一类中的实例构造函数或静态构造函数中出现.(在这些上下文中, ...

  3. style-11bak

    <resources> <style name="FullscreenTheme" parent="android:Theme.Holo"&g ...

  4. PHP利用递归法获取多级类别的树状数组

    数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名 测试数据: $aryCate = array( array('id' => 1, 'pid' => ...

  5. sqlserver 分页sql语句

     select * from (select *,row_number() over(order by CONTENT_ID ) as rnum from ArchiveContents) t whe ...

  6. [原]基于CAS实现单点登录(SSO):cas client端的退出问题

    自从CAS 3.4就很好的支持了单点注销功能,配置也很简单. 之前版本因为在CAS服务器通过HttpClient发送消息时并未指定为POST方式,所以在CAS客户端的注销Filter中没有收到POST ...

  7. css Block formatting context BFC

    w3c关于BFC解释: http://www.w3.org/TR/CSS21/visuren.html#block-formatting Mdn描述: A block formatting conte ...

  8. 奇怪的haproxy 跳转

    <pre name="code" class="html">奇怪的Haproxy 跳转: acl admin_req path_beg -i /ad ...

  9. favicon

    <link rel="icon" href="Images/wangyi.ico" type="text/plain" />

  10. Android开发10.3:UI组件GridView网格视图

    GridView(网格视图) 概述 GridView用于在界面上按行.列分布的方式来显示多个组件         GridView和ListView有共同的父类 : AbsListView       ...