二分图最大匹配模板

const int maxn=1505;//这个值要超过两边个数的较大者,因为有link
int link[maxn];
bool used[maxn];
vector<int>G[maxn];
int uN;为点的个数,如果编号从0开始就是n,否则就是n+1;
bool dfs(int u){
  for(int i=0;iif(!used[G[u][i]]){
      used[G[u][i]]=true;
      if(link[G[u][i]]==-1||dfs(link[G[u][i]])){
        link[G[u][i]]=u;
        return true;
      }
    }
  }
  return false;
}

int hungary(){
  int u;
  int res=0;
  memset(link,-1,sizeof(link));
  for(u=0;umemset(used,false,sizeof(used));
    if(dfs(u)) res++;
  }
  return res;
}

你可能感兴趣的:(图论)