Advertisement
Guest User

Untitled

a guest
Feb 20th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef pair<int,int> edge;
  4. #define pb push_back
  5. vector< pair<int,int> > adjList[1000]; // end node, color - 0 for blank, 1 for blue, 2 for red
  6. vector<edge> edges;
  7. int visited[1000];
  8. int dfs(int c, int prev, int d) {
  9.     /*
  10.     visited[momentalno teme] = 1 ako e del od ciklus so neparen broj na otsecki (2n+1-agolnik) i 2 ako ne e del od ciklus
  11.     */
  12.     if(prev == -1) {
  13.         visited[c] = 1;
  14.     }
  15.     if(visited[c]) {
  16.         if(visited[c] == 1) {
  17.             if(d % 2) return visited[c] = visited[prev] = 1;
  18.             else return visited[c] = visited[prev] = 2;
  19.         } else {
  20.             return visited[c];
  21.         }
  22.     }
  23.     if(prev != -1) visited[c] = visited[prev];
  24.     int ret;
  25.     if(adjList[c].size() > 2) {
  26.         visited[c] = 2;
  27.         for(auto k : adjList[c]) {
  28.             ret = dfs(k.first, c, d+1);
  29.         }
  30.     } else {
  31.         for(auto k : adjList[c]) {
  32.             if(k.first != prev) ret = dfs(k.first, c, d+1);
  33.         }
  34.     }
  35.     return ret;
  36. }
  37. int main()
  38. {
  39.     int n, m;
  40.     cin >> n >> m;
  41.     for(int i = 0; i < m; i++) {
  42.         int a, b;
  43.         cin >> a >> b;
  44.         a--, b--;
  45.         edges.pb({a,b});
  46.         adjList[a].pb({b, 0});
  47.     }
  48.     for(int i = 0; i < n; i++) {
  49.         memset(visited, 0, sizeof(visited));
  50.         int k = dfs(i, -1, 0);
  51.         cout << i << " " << k << endl;
  52.     }
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement