染色法判二分图
bool dfs(int x,int c){
color[x] = c;
for(int i = h[x];i;i = e[i].ne){
int v = e[i].to;
if(!color[v] && !dfs(v,!c)) return false;
else if(color[v] == c) return false;
}
return true;
}
bool check(){
mem(color,-1);
bool lab = true;
forr(i,1,n){
if(color[i] == -1 && !dfs(i,0)){
lab = false;
break;
}
}
return lab;
}
二分图最大匹配
void find(int x){
for(int i = h[x];i;i = e[i].ne){
int v = e[i].to;
if(!st[v]){
st[v] = 1;
if(!match[v] || find(match[v])) {
match[v] = x;
return true;
}
}
}
retrun false;
}
int res = 0;
forr(i,1,n){
mem(st,0);
if(find(i)) res++;
}