Advertisement
Guest User

Untitled

a guest
Oct 20th, 2014
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.20 KB | None | 0 0
  1. #include <cstring>
  2. #include <vector>
  3. #include <list>
  4. #include <map>
  5. #include <set>
  6. #include <queue>
  7. #include <deque>
  8. #include <stack>
  9. #include <bitset>
  10. #include <algorithm>
  11. #include <functional>
  12. #include <numeric>
  13. #include <utility>
  14. #include <sstream>
  15. #include <iostream>
  16. #include <iomanip>
  17. #include <cstdio>
  18. #include <cmath>
  19. #include <cstdlib>
  20. #include <ctime>
  21. #include <memory.h>
  22. #include <cassert>
  23.  
  24. using namespace std;
  25.  
  26. #define ll long long
  27. #define vi vector<int>
  28. #define pi pair<int,int>
  29. #define pb push_back
  30. #define mp make_pair
  31. #define forn(i,n) for (size_t i = 0; i < n; ++i)
  32. #define forb(i,n) for (int i = n - 1; i >= 0; --i)
  33.                              
  34. const double EPS = 1e-9;
  35. const int MAXN = 100500;
  36. const int MOD = 1e9 + 7;
  37. const int MOD1 = 1e9 + 35011;
  38. const int MOD2 = 1e9 + 18169;
  39. const int INF = (1 << 30);
  40. const long long INFl = 1e18;
  41.  
  42. int n, m, a, b, tmp[3];
  43. int color[MAXN];
  44. queue<int> q;
  45. vector<int> g[MAXN];
  46. char used[MAXN];
  47.  
  48. void check(int v) {
  49.    tmp[0] = tmp[1] = tmp[2] = 0;
  50.     forn(i,g[v].size()) {
  51.         if(color[g[v][i]] == 0) tmp[0]++;
  52.         if(color[g[v][i]] == 1) tmp[1]++;
  53.         if(color[g[v][i]] == 2) tmp[2]++;
  54.     }
  55.     if (tmp[color[v]] >= 2)
  56.         q.push(v);
  57. }
  58.  
  59. void recolor(int v) {
  60.     q.pop();
  61.    used[v] = true;
  62.    tmp[0] = tmp[1] = tmp[2] = 0;
  63.     forn(i,g[v].size()) {
  64.         if(color[g[v][i]] == 0) tmp[0]++;
  65.         if(color[g[v][i]] == 1) tmp[1]++;
  66.         if(color[g[v][i]] == 2) tmp[2]++;
  67.     }
  68.     for(int i = 0; i < 3; ++i) {
  69.         if (tmp[i] < 2) {
  70.             color[v] = i;
  71.             for (int j = 0; j < g[v].size(); j++)
  72.                 check(g[v][j]);
  73.             return;
  74.         }
  75.     }
  76. }
  77.  
  78. int main() {
  79. #ifdef F0X
  80.     freopen("input.in", "r", stdin);
  81. #endif
  82.    memset(color, 0, sizeof(int) * MAXN);
  83.    memset(used, false, sizeof(char) * MAXN);
  84.  
  85.    double st = clock();
  86.     scanf("%d%d", &n, &m);
  87.     forn(i,m) {
  88.         scanf("%d%d", &a, &b);
  89.         g[a].pb(b);
  90.         g[b].pb(a);
  91.     }        
  92.    
  93.     for (int i = 1; i <= n; i++) {
  94.         if (!used[i]) {
  95.             q.push(i);
  96.           while(q.size()) {
  97.             recolor(q.front());
  98.             }                  
  99.         }
  100.     }
  101.    
  102.     for (int i = 1; i <= n; ++i) {
  103.         printf("%d ", color[i] + 1);
  104.     }
  105.  
  106. #ifdef F0X
  107.     cerr << "Time is " << (clock() - st) / CLOCKS_PER_SEC << endl;
  108. #endif
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement