//hdu2255
#include<cstdio>
#include<cstring>
using namespace std;
const int N=100;
const int M=100;
struct Edge {
int v,next;
Edge(int v=-1,int next=-1):v(v),next(next){}
}e[M];
int head[N],total;
void init(){
memset(head,-1,sizeof(head));total=0;
}
void adde(int u,int v){
e[total]=Edge(v,head[u]);head[u]=total++;
}
int limit[N],cnt[N];
int vis[N];
int match[N][N];
int dfs(int u){
for(int i=head[u];i!=-1;i=e[i].next){
int v=e[i].v;
if(!vis[v]){
vis[v]=1;
if(cnt[v]<limit[v]){
match[v][cnt[v]++]=u;
return 1;
}
for(int j=0;j<cnt[v];j++){
if(dfs(match[v][j])){
match[v][j]=u;
return 1;
}
}
}
}
return 0;
}
int n,m;
int _hu(){
int ans=0;
memset(cnt,0,sizeof(cnt));
for(int i=0;i<n;i++){
memset(vis,0,sizeof(vis));
if(dfs(i))ans++;
}
return ans;
}
int main(){
return 0;
}
二分图多重匹配
最新推荐文章于 2020-01-03 10:46:13 发布