【图论】[二分图匹配] 模板
bool dfs(int u){
for(node *p=adj[u];p;p=p->next){
if(vis[p->v])
continue;
vis[p->v]=1;
if(!c[p->v]||dfs(c[p->v])){
c[u]=p->v;
c[p->v]=u;
return 1;
}
}
return 0;
}
void maxmatch(){
for(int i=1;i<=n;i++){
memset(vis,0,sizeof vis);
if(!c[i]&&dfs(i))
ans++;
}
}
在二分图中,最大匹配=最小点覆盖。
对于所有无向图,最小点覆盖+最大独立集=总点数