二分图匹配

陈子骏

2018-04-02 17:40:49

Personal

``` #include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; int n,m,e,ans; int t[1001][1001]; int dfn[1001],match[1001]; bool dfs(int x) { for(int i=1;i<=m;i++) { if(t[x][i]==1&&dfn[i]==0)//要求不在交替路中 { dfn[i]=1; if(!match[i]||dfs(match[i])) //// 如果是未盖点,说明交替路为增广路,则交换路径,并返回成功 { match[i]=x; return true; } } } return false; } int main() { scanf("%d%d%d",&n,&m,&e); for(int i=1;i<=e;i++) { int x,y; scanf("%d%d",&x,&y); if(x<=n&&y<=m)t[x][y]=1; } for(int i=1;i<=n;i++) { memset(dfn,0,sizeof(dfn)); if(dfs(i))ans++; } printf("%d",ans); return 0; } ```