fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7.  
  8. const int INF = 1e9;
  9. const ll LINF = 1e18;
  10.  
  11. // Một đồ thị là đồ thị hai phía khi và chỉ khi nó có thể được tô bằng 2 màu
  12. const int N = 1e5 + 5;
  13.  
  14. int n, m;
  15. vector<int> adj[N];
  16. int c[N]; // -1: chưa được tô, 0: màu 0, 1: màu 1
  17.  
  18. void dfs(int u, bool& is_bipartite) {
  19. for (int v : adj[u]) {
  20. if (c[v] == -1) {
  21. c[v] = c[u] ^ 1; // màu ngược với màu của c[u] (0 -> 1, 1 -> 0)
  22. dfs(v, is_bipartite);
  23. }
  24. else {
  25. is_bipartite &= (c[v] != c[u]);
  26. }
  27. }
  28. }
  29.  
  30. int main() {
  31. ios::sync_with_stdio(false);
  32. cin.tie(nullptr);
  33. cin >> n >> m;
  34. for (int i = 0; i < m; i++) {
  35. int u, v;
  36. cin >> u >> v;
  37. adj[u].push_back(v);
  38. adj[v].push_back(u);
  39. }
  40.  
  41. memset(c, -1, sizeof c);
  42.  
  43. bool is_bipartite = true;
  44.  
  45. for (int u = 1; u <= n; u++) {
  46. if (c[u] == -1) {
  47. c[u] = 1;
  48. dfs(u, is_bipartite);
  49. }
  50. }
  51.  
  52. if (!is_bipartite) {
  53. cout << "IMPOSSIBLE" << '\n';
  54. }
  55. else {
  56. for (int u = 1; u <= n; u++) cout << c[u] + 1 << ' ';
  57. }
  58. }
Success #stdin #stdout 0.01s 6464KB
stdin
5 3
1 2
1 3
4 5
stdout
2 1 1 2 1