【模板】二分圖匹配

水一波。

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,e,head[2000010],cnt,ans,vis[2000010],f[2000010];
struct node{
    int to,next;
}a[2000010]; 
void add(int x,int y){
    a[++cnt].to=y,a[cnt].next=head[x],head[x]=cnt;
}
bool dfs(int u,int time){
    for(int i=head[u],v;v=a[i].to,i;i=a[i].next)
        if(vis[v]^time){ 
            vis[v]=time;
            if((!f[v])||dfs(f[v],time)){//若未被匹配或者能商量,就將兩人匹配
                f[v]=u;return true;
            }
        }
    return false;
}
int main(){
    scanf("%d%d%d",&n,&m,&e);
    for(int i=1,a,b;i<=e;++i){
        scanf("%d%d",&a,&b);
        if(a>m||b>m) continue;
        add(a,b);
    }
    for(int i=1;i<=n;++i)
        if(dfs(i,i)) ans++;
    printf("%d",ans);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章