ivnikkk

Untitled

Dec 19th, 2022
829
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include "bits/stdc++.h"
  3. using namespace std;
  4. #define all(a) a.begin(), a.end()
  5. #define int long long
  6. using namespace std;
  7. vector<vector<int>> gr, rev_gr;
  8. vector<int> srt;
  9. vector<bool> used;
  10. vector<int> comp;
  11. void dfs1(int v) {
  12.     used[v] = true;
  13.     for (int& u : gr[v]) {
  14.         if (!used[u]) {
  15.             dfs1(u);
  16.         }
  17.     }
  18.     srt.push_back(v);
  19. }
  20. void dfs2(int v, int c) {
  21.     comp[v] = c;
  22.     for (int& u : rev_gr[v]) {
  23.         if (comp[u] == -1) {
  24.             dfs2(u, c);
  25.         }
  26.     }
  27. }
  28. signed main() {
  29. #ifdef _DEBUG
  30.     freopen("input.txt", "r", stdin);
  31.     freopen("output.txt", "w", stdout);
  32. #endif
  33.     ios_base::sync_with_stdio(false);
  34.     cin.tie(nullptr);
  35.     int n, m;
  36.     while(cin >> n >> m) {
  37.         n *= 2;
  38.         gr.clear(), rev_gr.clear(), comp.clear(), used.clear(), srt.clear();
  39.         gr.resize(n);
  40.         rev_gr.resize(n);
  41.         comp.resize(n, -1);
  42.         used.resize(n, false);
  43.         for (int i = 0; i < m; i++) {
  44.             int i1, e1, i2, e2; cin >> i1 >> e1 >> i2 >> e2;
  45.             int v1[2] = {i1 * 2, i1 * 2 + 1};
  46.             int v2[2] = {i2 * 2, i2 * 2 + 1};
  47.             gr[v1[e1 ^ 1]].push_back(v2[e2]);
  48.             rev_gr[v2[e2]].push_back(v1[e1 ^ 1]);
  49.  
  50.             gr[v2[e2 ^ 1]].push_back(v1[e1]);
  51.             rev_gr[v1[e1]].push_back(v2[e2 ^ 1]);
  52.         }
  53.         for (int i = 0; i < n; i++) {
  54.             if (!used[i]) {
  55.                 dfs1(i);
  56.             }
  57.         }
  58.         int clr = 1;
  59.         reverse(all(srt));
  60.         for (int i = 0; i < (int)srt.size(); i++) {
  61.             if (comp[srt[i]] == -1) {
  62.                 dfs2(srt[i], clr++);
  63.             }
  64.         }
  65.         for (int i = 0; i < n; i += 2) {
  66.             int res = (comp[i] < comp[i ^ 1] ? 1 : 0);
  67.             cout << res;
  68.         }
  69.         cout << '\n';
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment