Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include "bits/stdc++.h"
- using namespace std;
- #define all(a) a.begin(), a.end()
- #define int long long
- using namespace std;
- vector<vector<int>> gr, rev_gr;
- vector<int> srt;
- vector<bool> used;
- vector<int> comp;
- void dfs1(int v) {
- used[v] = true;
- for (int& u : gr[v]) {
- if (!used[u]) {
- dfs1(u);
- }
- }
- srt.push_back(v);
- }
- void dfs2(int v, int c) {
- comp[v] = c;
- for (int& u : rev_gr[v]) {
- if (comp[u] == -1) {
- dfs2(u, c);
- }
- }
- }
- signed main() {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- int n, m;
- while(cin >> n >> m) {
- n *= 2;
- gr.clear(), rev_gr.clear(), comp.clear(), used.clear(), srt.clear();
- gr.resize(n);
- rev_gr.resize(n);
- comp.resize(n, -1);
- used.resize(n, false);
- for (int i = 0; i < m; i++) {
- int i1, e1, i2, e2; cin >> i1 >> e1 >> i2 >> e2;
- int v1[2] = {i1 * 2, i1 * 2 + 1};
- int v2[2] = {i2 * 2, i2 * 2 + 1};
- gr[v1[e1 ^ 1]].push_back(v2[e2]);
- rev_gr[v2[e2]].push_back(v1[e1 ^ 1]);
- gr[v2[e2 ^ 1]].push_back(v1[e1]);
- rev_gr[v1[e1]].push_back(v2[e2 ^ 1]);
- }
- for (int i = 0; i < n; i++) {
- if (!used[i]) {
- dfs1(i);
- }
- }
- int clr = 1;
- reverse(all(srt));
- for (int i = 0; i < (int)srt.size(); i++) {
- if (comp[srt[i]] == -1) {
- dfs2(srt[i], clr++);
- }
- }
- for (int i = 0; i < n; i += 2) {
- int res = (comp[i] < comp[i ^ 1] ? 1 : 0);
- cout << res;
- }
- cout << '\n';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment