二分图最大匹配
int line[maxn][maxn],used[maxn],nxt[maxn];//line[i][j]代表有没有边,used代表在这次匹配的过程种右边点用过没有,nxt为右边的归属
bool Find(int x){
for(int i = 1;i <= m;i++){//m为二分图右边的点个数
if(line[x][i]&&!used[i]){
used[i] = 1;
if(nxt[i] == 0||Find(nxt[i])){
nxt[i] = x;
return true;
}
}
}
return false;
}
int match(){
int sum = 0;
for(int i = 1;i <= n;i++){//n为二分图左边的点数,枚举每个点,看能不能匹配
memset(used,0,sizeof(used));
if(Find(i)) sum++;
}
return sum;
}