「template」 二分图相关

染色法判二分图


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;
}

二分图最大匹配

//匈牙利算法
// match[],st[];
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++;
}

猜你喜欢

转载自blog.csdn.net/qq_51687628/article/details/121506138
今日推荐