POJ-1274 The Perfect Stall---二分图模板
题目链接:
https://vjudge.net/problem/POJ-1274
题目大意:
有n个奶牛和m个谷仓,现在每个奶牛有自己喜欢去的谷仓,并且它们只会去自己喜欢的谷仓吃东西,问最多有多少奶牛能够吃到东西
输入第一行给出n与m接着n行每行第一个数代表这个奶牛喜欢的谷仓的个数P,后面接着P个数代表这个奶牛喜欢哪个谷仓
思路:
- #include<iostream>
- #include<vector>
- #include<cstring>
- #include<queue>
- using namespace std;
- const int maxn = + ;
- const int INF = 0x3f3f3f3f;
- int Map[maxn][maxn];
- int cx[maxn], cy[maxn];
- //cx[i]表示与x部的点i匹配的y部的点的编号
- //cy[i]表示与y部的点i匹配的x部的点的编号
- bool vis[maxn];//标记y部的点是否加入增广路
- int cntx, cnty;//x部点的数目和y部点的数目
- bool dfs(int u)//dfs进入的都是x部的点
- {
- for(int v = ; v <= cnty; v++)//枚举y部的点
- {
- if(Map[u][v] && !vis[v])//存在边,并且还未加入增广路
- {
- vis[v] = ;//标记加入增广路
- //如果Y部的点v还未被匹配
- //或者已经被匹配了,但是可以从v点原来匹配的cy[v]找到一条增广路
- //说明这条路就可是一个正确的匹配
- if(cy[v] == - || dfs(cy[v]))
- {
- cx[u] = v;
- cy[v] = u;
- return true;
- }
- }
- }
- return false;//不能匹配
- }
- int maxmatch()//匈牙利算法找最大匹配
- {
- int ans = ;
- memset(cx, -, sizeof(cx));
- memset(cy, -, sizeof(cy));//初始化均未匹配
- for(int i = ; i <= cntx; i++)//枚举x部的点
- {
- if(cx[i] == -)//还未匹配,寻找从i点出发是否存在增广路
- {
- memset(vis, , sizeof(vis));
- ans += dfs(i);
- }
- }
- return ans;
- }
- int main()
- {
- while(cin >> cntx >> cnty)
- {
- memset(Map, , sizeof(Map));
- int v, t;
- for(int u = ; u <= cntx; u++)
- {
- cin >> t;
- while(t--)
- {
- cin >> v;
- Map[u][v] = ;
- }
- }
- cout<<maxmatch()<<endl;
- //for(int i = 1; i <= cntx; i++)cout<<i<<" "<<cx[i]<<endl;
- }
- }
POJ-1274 The Perfect Stall---二分图模板的更多相关文章
- [POJ] 1274 The Perfect Stall(二分图最大匹配)
题目地址:http://poj.org/problem?id=1274 把每个奶牛ci向它喜欢的畜栏vi连边建图.那么求最大安排数就变成求二分图最大匹配数. #include<cstdio> ...
- 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 农夫约翰上个 ...
- POJ 1274 The Perfect Stall || POJ 1469 COURSES(zoj 1140)二分图匹配
两题二分图匹配的题: 1.一个农民有n头牛和m个畜栏,对于每个畜栏,每头牛有不同喜好,有的想去,有的不想,对于给定的喜好表,你需要求出最大可以满足多少头牛的需求. 2.给你学生数和课程数,以及学生上的 ...
- poj——1274 The Perfect Stall
poj——1274 The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25709 A ...
- poj 1274 The Perfect Stall【匈牙利算法模板题】
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20874 Accepted: 942 ...
- POJ 1274 The Perfect Stall、HDU 2063 过山车(最大流做二分匹配)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24081 Accepted: 106 ...
- poj 1274 The Perfect Stall (二分匹配)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17768 Accepted: 810 ...
- poj —— 1274 The Perfect Stall
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26274 Accepted: 116 ...
- POJ 1274 The Perfect Stall (二分图匹配)
[题目链接] http://poj.org/problem?id=1274 [题目大意] 给出一些奶牛和他们喜欢的草棚,一个草棚只能待一只奶牛, 问最多可以满足几头奶牛 [题解] 奶牛和喜欢的草棚连线 ...
- POJ 1274 The Perfect Stall(二分图 && 匈牙利 && 最小点覆盖)
嗯... 题目链接:http://poj.org/problem?id=1274 一道很经典的匈牙利算法的题目: 将每只奶牛看成二分图中左边的点,将牛圈看成二分图中右边的点,如果奶牛看上某个牛圈,就将 ...
随机推荐
- Trie[字典树] 数据结构及基本操作集
#include <iostream> #include <stdio.h> #include <cstring> #include <algorithm&g ...
- Java web错误汇总
环境: 电脑:win 10 IDE: Eclipse Java EE IDE for Web Developers. Version: Luna Service Release 2 (4.4.2) B ...
- WPF动画——故事板(Storyboard)
1.XAML代码 <Window x:Class="故事板.MainWindow" x:Name="window" xmlns="http:// ...
- 明天找python工作,看看这几道Python面试题吧,Python面试题No14
第1题: 如何解决验证码的问题,用什么模块,听过哪些人工打码平台? PIL.pytesser.tesseract模块 平台的话有:(打码平台特殊,不保证时效性) 云打码 挣码 斐斐打码 若快打码 超级 ...
- Java基础笔记(十二)——方法
方法:实现一个功能. 方法声明: 访问修饰符 返回类型 方法名(参数列表){ //方法体 } 访问修饰符:public.private.protect.default 返回类型:void——无返 ...
- 剑指offer刷题记录
目录 二维数组中的查找 替换空格 从尾到头打印链表 反转链表 重建二叉树 用两个栈实现队列 旋转数组的最小数字 斐波拉切数列 跳台阶 变态跳台阶 矩形覆盖 二进制中1的个数 数值的整次方 链表中倒数第 ...
- oracle(三)
/****************************表空间 start****************************/ --表空间的作用 /** 1.决定数据库实体的空间分配 2.设置 ...
- Word中图片自动编号且与文中引用的编号对应
当我们在进行大篇幅 word 文档的编写时, 为了节约修改文章中图片所花费的大量时间, 可以将图片自动编号,且让文中引用的顺序跟着图片顺序的变化而变化,具体操作如下: 1. 将鼠标定在欲加编号的下方, ...
- Java集合——List集合
1.集合框架的作用 在实际开发中,我们经常会对一组相同类型的数据进行统一管理操作.到目前为止,我们可以使用数组结构,链表结构,二叉树结构来实现. 数组的最大问题在于数组中的元素个数是固定的,要实现动态 ...
- 用汇编实现add函数
平台 macOS 工具 nasm clang 文件 main.c #include <stdio.h> int add(int a, int b); int main() { printf ...