Advertisement
Guest User

B(dfs)

a guest
Jan 19th, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int MAXN = 1e5 + 1;
  6.  
  7. vector <int> g[MAXN], ans;
  8. short col[MAXN], cur_col = 1; // 0 - unvisited, 1 - part 1, 2 - part 2
  9.  
  10. bool dfs(int v) // Поиск в глубину (true - Ok, false - цикл)
  11. {
  12.     col[v] = cur_col;
  13.     cur_col = cur_col % 2 + 1; //swap colors
  14.     for(int to : g[v])
  15.     {
  16.         if(col[to] and col[to] != cur_col or col[to] == 0 and !dfs(to))
  17.            return false;
  18.     }
  19.     cur_col = cur_col % 2 + 1; //swap colors
  20.     return true;
  21. }
  22.  
  23. string solve(int n)
  24. {
  25. //    for(int i = 1; i <= n; i++)
  26. //        if(col[i] == 0 and !dfs(i))
  27. //        {
  28. //            return "NO";
  29. //        }
  30. //    return "BIPARTITE";
  31.     vector<char> part (n + 1, -1);
  32.     bool ok = true;
  33.     vector<int> q (n + 1);
  34.     for (int st=1; st<=n; ++st)
  35.         if (part[st] == -1) {
  36.             int h=0, t=0;
  37.             q[t++] = st;
  38.             part[st] = 0;
  39.             while (h<t) {
  40.                 int v = q[h++];
  41.                 for (size_t i=0; i<g[v].size(); ++i) {
  42.                     int to = g[v][i];
  43.                     if (part[to] == -1)
  44.                         part[to] = !part[v],  q[t++] = to;
  45.                     else
  46.                         ok &= part[to] != part[v];
  47.                 }
  48.             }
  49.         }
  50.     return ok ? "BIPARTITE" : "NO";
  51. }
  52.  
  53. int main()
  54. {
  55.     // Ускорение ввода
  56.     ios_base::sync_with_stdio(0);
  57.     cin.tie(0);
  58.     cout.tie(0);
  59.  
  60.     // Ввод/вывод из файла
  61.     freopen("input.txt", "r", stdin);
  62.     freopen("output.txt", "w", stdout);
  63.  
  64.     // Ввод
  65.     int n, m;
  66.     cin >> n >> m;
  67.     while(m--)
  68.     {
  69.         int a, b;
  70.         cin >> a >> b;
  71.         g[a].push_back(b);
  72.         g[b].push_back(a);
  73.     }
  74.  
  75.     cout << solve(n);
  76.  
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement