1.定义:可以将图分成两个互不相交的集合,使得在集合内部没有连上的边,而集合之间有连边
2.特点:唯一染色:可以被黑白两色染色,不会出现冲突,否则不成立
3.实现:dfs
dfs(int p)
flag = true;
if vis p == true then //p被染色了
if color == father_color
flag = false;
else
color p_son = 1 - color p
-> dfs(p_son)
void dfs(int p,int fa,int val){
g[p]=true;if(!is) return;
for(node t:v[p]){
if(t.y==fa||t.val<=val) continue;
if(g[t.y]){
if(f[p]==1&&f[t.y]==1||f[p]==2&&f[t.y]==2)
is=false;
}
else{
f[t.y]=f[p]==1?2:1;
dfs(t.y,p,val);
}
}
}