P3386 【模板】二分图匹配
时间:2022-05-08
本文章向大家介绍P3386 【模板】二分图匹配,主要内容包括题目背景、题目描述、输入输出格式、输入输出样例、说明、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
题目背景
二分图
题目描述
给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数
输入输出格式
输入格式:
第一行,n,m,e
第二至e+1行,每行两个正整数u,v,表示u,v有一条连边
输出格式:
共一行,二分图最大匹配
输入输出样例
输入样例#1:
1 1 1
1 1
输出样例#1:
1
说明
n,m<=1000,1<=u<=n,1<=v<=m
因为数据有坑,可能会遇到v>m的情况。请把v>m的数据自觉过滤掉。
算法:二分图匹配
为什么邻接表A不了,,,,
好奇怪,,
换上邻接矩阵秒过,,,,
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 using namespace std;
6 const int MAXN=1001;
7 void read(int & n)
8 {
9 char c='+';int x=0;bool flag=0;
10 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
11 while(c>='0'&&c<='9')x=x*10+(c-48),c=getchar();
12 flag==1?n=-x:n=x;
13 }
14 struct node
15 {
16 int u,v,nxt;
17 }edge[MAXN];
18 int head[MAXN];
19 int num=1;
20 int n,m,e;
21 void add_edge(int x,int y)
22 {
23 edge[num].u=x;
24 edge[num].v=y;
25 edge[num].nxt=head[x];
26 head[x]=num++;
27 }
28 int vis[MAXN];
29 int link[MAXN];
30 int ans=0;
31 int map[MAXN][MAXN];
32 bool dfs(int x)
33 {
34 /*for(int i=head[x];i!=-1;i=edge[i].nxt)
35 {
36 if(!vis[edge[i].v])
37 {
38 vis[edge[i].v]=1;
39 if(!link[edge[i].v]||dfs(link[edge[i].v]))
40 {
41 link[edge[i].v]=x;
42 return 1;
43 }
44 }
45 }
46 return 0;*/
47 for(int i=1;i<=m;i++)
48 {
49 if(map[x][i]&&!vis[i])
50 {
51 vis[i]=1;
52 if(!link[i]||dfs(link[i]))
53 {
54 link[i]=x;
55 return 1;
56 }
57 }
58 }
59 return 0;
60 }
61 int main()
62 {
63 memset(head,-1,sizeof(head));
64 read(n);read(m);read(e);
65 for(int i=1;i<=e;i++)
66 {
67 int x,y;
68 read(x);read(y);
69 if(x>n||y>m)continue;
70 //add_edge(x,y);
71 map[x][y]=1;
72 }
73 for(int i=1;i<=n;i++)
74 {
75 memset(vis,0,sizeof(vis));
76 if(dfs(i))
77 ans++;
78 }
79 printf("%d",ans);
80 return 0;
81 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法