标签:数据 输出 输入输出 reg mil scanf 说明 using family
给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数
输入格式:
第一行,n,m,e
第二至e+1行,每行两个正整数u,v,表示u,v有一条连边
输出格式:
共一行,二分图最大匹配
n,m≤1000,1≤u≤n,1≤v≤m
因为数据有坑,可能会遇到 v>mv>m 的情况。请把 v>mv>m 的数据自觉过滤掉。
std
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ans,mp[1001][1001],match[10001]; bool vis[10001]; int p,n,m; bool Hungary(int x){ for(int i=1;i<=m;++i){ if(!vis[i] && mp[x][i]){ vis[i]=true; if(!match[i] || Hungary(match[i])){ match[i]=x; return 1; } } } return 0; } int main() { scanf("%d%d%d",&n,&m,&p); for(int i=1;i<=p;++i) { int from,to; scanf("%d%d",&from,&to); if(from>=1&&from<=n && to>=1&&to<=p) mp[from][to]=1; } for(int i=1;i<=n;++i) { memset(vis,false,sizeof(vis)); ans+=Hungary(i); } printf("%d",ans); return 0; }
标签:数据 输出 输入输出 reg mil scanf 说明 using family
原文地址:https://www.cnblogs.com/qseer/p/9636043.html