二分图最大匹配
<pre><code class="language-cpp">int vis[maxn];
int pre[maxn];
bool found(int u, int t){
vis[u] = t;
for(int i = 0; i < mp[u].size(); i++){
int v = mp[u][i];
if(vis[v] == t) continue;
vis[v] = t;
if(pre[v] == 0 || found(pre[v], t)){
pre[v] = u;
return true;
}
}
return false;
}</code></pre>