DAY 3 小白菜oj 1122
来源:互联网 发布:程序员女朋友礼物代码 编辑:程序博客网 时间:2024/06/09 20:21
1122: (二分图)
时间限制: 1 Sec 内存限制: 128 MB
提交: 556 解决: 163
[提交][状态][讨论版]
题目描述
【问题背景】
n只公牛和m只母牛,
某些公牛和某些母牛互相喜欢。
但最后一只公牛只能和一只母牛建立一对一匹配。
要使得最后牛群匹配对数最大。
【输入】
第一行三个整数n, m,k( 1<= n, m <= 10000,0< k <= 100000)。
下来k行,每行两个整数 x,y,表示一条边,连接X集合中x点和Y集合的y点。
【输出】
只有一行。输出一个整数,表示牛群匹配对数最大值.
input:
5 5 9
1 2
2 2
2 3
2 5
3 1
3 3
4 1
5 3
5 4
output
5
#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#define N 800005using namespace std;int m,n;int tot;int head[N];int to[N];int nex[N];int match[N];bool v[N];inline void add(int x,int y){ ++tot; nex[tot]=head[x]; head[x]=tot; to[tot]=y;}int k;int dfs(int u){ for(int i=head[u];i;i=nex[i]){ int dmf=to[i]; if(!v[dmf]){ v[dmf]=1; if(!match[dmf]||dfs(match[dmf])) { match[dmf]=u; return 1; } } } return 0;}int ans=0;int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=k;i++){ int x,y; scanf("%d%d",&x,&y); add(x,y+n); } for(int i=1;i<=n;i++){ memset(v,0,sizeof(v)); if(dfs(i)) ans++; } printf("%d",ans); return 0;}
手动打对的第一个匈牙利~~~
阅读全文
0 0
- DAY 3 小白菜oj 1122
- 小白菜Oj-美元与马克-动态规划
- LeetCode小白菜笔记[3]:Palindrome Number
- 小白菜oj 1099: [视频]线段树(元问题byscy)线性结构求极值和修改
- 清炒小白菜
- 南邮 OJ 1136 Happy Children’s Day
- 九度OJ-1043:Day of Week
- 九度OJ 1043 Day of Week
- Day-3
- day 3
- Day 3
- [Day 3]
- Day 3
- json学习小白菜
- 小白菜的问题~
- 三层体系结构详细说明 (小白菜)
- 小白菜《疯狂的程序员》读后感
- [课堂笔记]小白菜鸟重装系统
- bzoj 2751(快速幂+乘法原理)
- 社会网络中的影响力最大化问题
- 以空间换时间的排序(不发生交换的排序)
- 数据结构第一章实验
- Java练习
- DAY 3 小白菜oj 1122
- caffe中参数含义solver文件<二>
- 笔记9 | 使用wifi连接adb打印数据
- JavaWeb
- 现有一个n个整数的序列,你要做的就是交换两个数的位置直到整个序列按照升序排列,那么将这个整数序列排好序,需要交换多少次?
- 前端修炼之路(小白初级篇)
- tensorflow name_scope variable_scope
- struts配置出错的问题
- 算法之旅 | 选择排序法