Guest User

Untitled

a guest
Jan 19th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <queue>
  6.  
  7. using namespace std;
  8.  
  9. #define FILE "bicone"
  10. vector <vector <int > > g;
  11. vector <bool> used;
  12. vector <int> color;
  13. vector <int> ret, enter;
  14.  
  15. int timer = 0;
  16. bool FLAG = false;
  17. int maxcolor = 0;
  18.  
  19. void dfs(int v, int p) {
  20.     used[v] = true;
  21.     enter[v] = ret[v] = timer++;
  22.     for(int i = 0; i < g[v].size(); ++i) {
  23.         int to = g[v][i];
  24.         if(to == p) continue;
  25.         if(used[to])
  26.             ret[v] = min(enter[to], ret[v]);
  27.         else {
  28.             dfs(to, v);
  29.             ret[v] = min(ret[to], ret[v]);
  30.         }
  31.     }
  32. }
  33.  
  34. void paint(int v, int v_color) {
  35.     color[v] = v_color;
  36.     for(int i = 0; i < g[v].size(); ++i) {
  37.         int to = g[v][i];
  38.         if(color[to] == -1) {
  39.             if(ret[to] == enter[to]) {
  40.                 maxcolor++;
  41.                 paint(to, maxcolor);
  42.             }
  43.             else paint(to, v_color);
  44.         }
  45.     }
  46. }
  47. int main() {
  48.     freopen(FILE".in", "r", stdin);
  49.     freopen(FILE".out", "w", stdout);
  50.     int n, m, a, b;
  51.     cin >> n >> m;
  52.     g.resize(n);
  53.     color.resize(n, -1);
  54.     used.resize(n, false);
  55.     enter.resize(n, 0);
  56.     ret.resize(n, 0);
  57.     for(int i = 0; i < m; ++i) {
  58.         cin >> a >> b;
  59.         --a; --b;
  60.         g[a].push_back(b);
  61.         g[b].push_back(a);
  62.     }
  63.     timer = 0;
  64.     for(int i = 0; i < n; ++i)
  65.         if(!used[i])
  66.             dfs(i, -1);
  67.  
  68.     for(int i = 0; i < n; ++i) {
  69.         if(color[i] == -1) {
  70.             maxcolor++;
  71.             paint(i, maxcolor);
  72.         }
  73.     }
  74.     cout << maxcolor << endl;
  75.     for(int i = 0; i < n; ++i)
  76.         cout << color[i] << " ";
  77.     return 0;
  78. }
Add Comment
Please, Sign In to add comment