有关二分图最大匹配
bool dfs(int u){
for(int i=h[u];i;i=e[i].p){
int v=e[i].v;
if(vis[v])continue;//二分图匹配关心的应该是被匹配点的vis
vis[v]=1;
if((!link[v])||dfs(link[v])){
link[v]=u;return 1;
}
}
return 0;
}
错解
这样也可以过luogu的模板
bool dfs(int u){
if(vis[u])return 0;
vis[u]=1;//不是关心匹配的点
for(int i=h[u];i;i=e[i].p){
int v=e[i].v;
if((!link[v])||dfs(link[v])){
link[v]=u;return 1;
}
}
return 0;
}
有关网络最大流
ll dfs(ll now,ll rest)
{
if(now==t)return rest;
ll di,tot=0;
for(ll &i=ht[now];i;i=p[i]){
ll v1=v[i];
if(w[i]>0&&dis[v1]==dis[now]+1){
di=dfs(v1,min(rest,w[i]));//否则这里的流量会有问题
w[i]-=di;w[i^1]+=di;
rest-=di;tot+=di;//rest需要-di
if(rest==0)break;//注意这里是rest==0,不是rest==tot
}
}
return tot;
}
即使是错解也可以过luogu的模板