牛客演算法週週練20 F.紫魔法師 (二分圖染色)
阿新 • • 發佈:2020-08-18
-
題意:給你一張圖,對其染色,使得相連的點的顏色兩兩不同求,最少使用多少種顏色.
-
題解:首先,若\(n=1\),只需要一種.然後我們再去判斷是否是二分圖,對於二分圖,兩種顏色就夠了,若不是二分圖,也就是可能存在奇環的情況,那麼三種顏色鐵夠了.所以題目就轉化成了判斷是否是二分圖.
-
程式碼:
int n,m; int u,v; int color[N]; vector<int> V[N]; bool dfs(int u,int c){ color[u]=c; for(auto w:V[u]){ if(!color[w]){ if(!dfs(w,3-c)) return false; } else{ if(color[w]==c) return false; } } return true; } int main() { //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); scanf("%d %d",&n,&m); for(int i=1;i<=m;++i){ scanf("%d %d",&u,&v); V[u].pb(v); V[v].pb(u); } if(n==1){ puts("1"); return 0; } bool flag=true; for(int i=1;i<=n;++i){ if(!color[i]){ if(!dfs(i,1)){ flag=false; break; } } } if(!flag) puts("3"); else puts("2"); return 0; }