题目链接:

https://vjudge.net/problem/POJ-1274

题目大意:

有n个奶牛和m个谷仓,现在每个奶牛有自己喜欢去的谷仓,并且它们只会去自己喜欢的谷仓吃东西,问最多有多少奶牛能够吃到东西

输入第一行给出n与m接着n行每行第一个数代表这个奶牛喜欢的谷仓的个数P,后面接着P个数代表这个奶牛喜欢哪个谷仓

思路:

二分图模板

  1. #include<iostream>
  2. #include<vector>
  3. #include<cstring>
  4. #include<queue>
  5. using namespace std;
  6. const int maxn = + ;
  7. const int INF = 0x3f3f3f3f;
  8. int Map[maxn][maxn];
  9. int cx[maxn], cy[maxn];
  10. //cx[i]表示与x部的点i匹配的y部的点的编号
  11. //cy[i]表示与y部的点i匹配的x部的点的编号
  12. bool vis[maxn];//标记y部的点是否加入增广路
  13. int cntx, cnty;//x部点的数目和y部点的数目
  14.  
  15. bool dfs(int u)//dfs进入的都是x部的点
  16. {
  17. for(int v = ; v <= cnty; v++)//枚举y部的点
  18. {
  19. if(Map[u][v] && !vis[v])//存在边,并且还未加入增广路
  20. {
  21. vis[v] = ;//标记加入增广路
  22. //如果Y部的点v还未被匹配
  23. //或者已经被匹配了,但是可以从v点原来匹配的cy[v]找到一条增广路
  24. //说明这条路就可是一个正确的匹配
  25. if(cy[v] == - || dfs(cy[v]))
  26. {
  27. cx[u] = v;
  28. cy[v] = u;
  29. return true;
  30. }
  31. }
  32. }
  33. return false;//不能匹配
  34. }
  35. int maxmatch()//匈牙利算法找最大匹配
  36. {
  37. int ans = ;
  38. memset(cx, -, sizeof(cx));
  39. memset(cy, -, sizeof(cy));//初始化均未匹配
  40. for(int i = ; i <= cntx; i++)//枚举x部的点
  41. {
  42. if(cx[i] == -)//还未匹配,寻找从i点出发是否存在增广路
  43. {
  44. memset(vis, , sizeof(vis));
  45. ans += dfs(i);
  46. }
  47. }
  48. return ans;
  49. }
  50. int main()
  51. {
  52. while(cin >> cntx >> cnty)
  53. {
  54. memset(Map, , sizeof(Map));
  55. int v, t;
  56. for(int u = ; u <= cntx; u++)
  57. {
  58. cin >> t;
  59. while(t--)
  60. {
  61. cin >> v;
  62. Map[u][v] = ;
  63. }
  64. }
  65. cout<<maxmatch()<<endl;
  66. //for(int i = 1; i <= cntx; i++)cout<<i<<" "<<cx[i]<<endl;
  67. }
  68. }

POJ-1274 The Perfect Stall---二分图模板的更多相关文章

  1. [POJ] 1274 The Perfect Stall(二分图最大匹配)

    题目地址:http://poj.org/problem?id=1274 把每个奶牛ci向它喜欢的畜栏vi连边建图.那么求最大安排数就变成求二分图最大匹配数. #include<cstdio> ...

  2. Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配)

    Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配) Description 农夫约翰上个 ...

  3. POJ 1274 The Perfect Stall || POJ 1469 COURSES(zoj 1140)二分图匹配

    两题二分图匹配的题: 1.一个农民有n头牛和m个畜栏,对于每个畜栏,每头牛有不同喜好,有的想去,有的不想,对于给定的喜好表,你需要求出最大可以满足多少头牛的需求. 2.给你学生数和课程数,以及学生上的 ...

  4. poj——1274 The Perfect Stall

    poj——1274   The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25709   A ...

  5. poj 1274 The Perfect Stall【匈牙利算法模板题】

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20874   Accepted: 942 ...

  6. POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24081   Accepted: 106 ...

  7. poj 1274 The Perfect Stall (二分匹配)

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17768   Accepted: 810 ...

  8. poj —— 1274 The Perfect Stall

    The Perfect Stall Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26274   Accepted: 116 ...

  9. POJ 1274 The Perfect Stall (二分图匹配)

    [题目链接] http://poj.org/problem?id=1274 [题目大意] 给出一些奶牛和他们喜欢的草棚,一个草棚只能待一只奶牛, 问最多可以满足几头奶牛 [题解] 奶牛和喜欢的草棚连线 ...

  10. POJ 1274 The Perfect Stall(二分图 && 匈牙利 && 最小点覆盖)

    嗯... 题目链接:http://poj.org/problem?id=1274 一道很经典的匈牙利算法的题目: 将每只奶牛看成二分图中左边的点,将牛圈看成二分图中右边的点,如果奶牛看上某个牛圈,就将 ...

随机推荐

  1. Trie[字典树] 数据结构及基本操作集

    #include <iostream> #include <stdio.h> #include <cstring> #include <algorithm&g ...

  2. Java web错误汇总

    环境: 电脑:win 10 IDE: Eclipse Java EE IDE for Web Developers. Version: Luna Service Release 2 (4.4.2) B ...

  3. WPF动画——故事板(Storyboard)

    1.XAML代码 <Window x:Class="故事板.MainWindow" x:Name="window" xmlns="http:// ...

  4. 明天找python工作,看看这几道Python面试题吧,Python面试题No14

    第1题: 如何解决验证码的问题,用什么模块,听过哪些人工打码平台? PIL.pytesser.tesseract模块 平台的话有:(打码平台特殊,不保证时效性) 云打码 挣码 斐斐打码 若快打码 超级 ...

  5. Java基础笔记(十二)——方法

    方法:实现一个功能. 方法声明: 访问修饰符  返回类型   方法名(参数列表){ //方法体 } 访问修饰符:public.private.protect.default 返回类型:void——无返 ...

  6. 剑指offer刷题记录

    目录 二维数组中的查找 替换空格 从尾到头打印链表 反转链表 重建二叉树 用两个栈实现队列 旋转数组的最小数字 斐波拉切数列 跳台阶 变态跳台阶 矩形覆盖 二进制中1的个数 数值的整次方 链表中倒数第 ...

  7. oracle(三)

    /****************************表空间 start****************************/ --表空间的作用 /** 1.决定数据库实体的空间分配 2.设置 ...

  8. Word中图片自动编号且与文中引用的编号对应

    当我们在进行大篇幅 word 文档的编写时, 为了节约修改文章中图片所花费的大量时间, 可以将图片自动编号,且让文中引用的顺序跟着图片顺序的变化而变化,具体操作如下: 1. 将鼠标定在欲加编号的下方, ...

  9. Java集合——List集合

    1.集合框架的作用 在实际开发中,我们经常会对一组相同类型的数据进行统一管理操作.到目前为止,我们可以使用数组结构,链表结构,二叉树结构来实现. 数组的最大问题在于数组中的元素个数是固定的,要实现动态 ...

  10. 用汇编实现add函数

    平台 macOS 工具 nasm clang 文件 main.c #include <stdio.h> int add(int a, int b); int main() { printf ...