二分图最大匹配

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;
}