二分图最大匹配-匈牙利算法
时间复杂度O(nm)
vector<int>e[maxn];
int match[maxn];
int ans;
int vis[maxn];
set<pii>st;
bool dfs(int u){
for(int v:e[u]){
if(vis[v])continue;
vis[v]=1;
if(!match[v]||dfs(match[v])){
match[v]=u;
return true;
}
}
return false;
}
void solve(){
int n,m,ed;cin>>n>>m>>ed;
for(int i=1;i<=ed;i++){
int u,v;cin>>u>>v;
if(st.count({u,v}))continue;
e[u].pb(v);st.insert({u,v});
}
for(int i=1;i<=n;i++){
memset(vis,0,sizeof(vis));
if(dfs(i))ans++;
}
cout<<ans<<endl;
}

浙公网安备 33010602011771号