Guest User

Untitled

a guest
Oct 19th, 2014
454
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. #include <vector>
  4. #include <fstream>
  5. #include <string>
  6. #include <queue>
  7. #include <time.h>
  8. using namespace std;
  9.  
  10.  
  11. ifstream in("coloring.in");
  12. ofstream out("coloring.out");
  13.  
  14.  
  15. /**/
  16. #define cin in
  17. #define cout out/*
  18. */
  19.  
  20. vector<vector<int> > g;
  21.  
  22.  
  23.  
  24. int main()
  25. {
  26.     srand(time(0));
  27.     int n, m;
  28.     cin >> n >> m;
  29.     g.resize(n);
  30.    
  31.     for (int i = 0; i < m; i++)
  32.     {
  33.         int l, r;
  34.         cin >> l >> r;
  35.         l--;
  36.         r--;
  37.         g[l].push_back(r);
  38.         g[r].push_back(l);
  39.     };
  40.  
  41.  
  42.  
  43.     bool AC = 0;
  44.     //это АС
  45.     while(clock() <  CLOCKS_PER_SEC * 1.666 )
  46.     {
  47. //cout << " FUCK" << " " << clock() <<  endl;
  48.             vector<int> color(n,0);
  49.     vector<bool> isM(n,0);
  50.  
  51.     queue<int> q;
  52.     vector<bool> used(n,0);
  53.  
  54.         AC = 1;
  55.         for (int y = 0; y < n; y++)
  56.         {
  57.             if (used[y])
  58.                 continue;
  59.  
  60.             used[y] = 1;
  61.             q.push(y);
  62.  
  63.             while (!q.empty())
  64.             {
  65.                 int i = q.front();
  66.                 q.pop();
  67.                 vector<int> x(4,0);
  68.                 vector<bool> f(4,0);
  69.                 for (int j = 0; j < g[i].size(); j++)
  70.                 {
  71.                     if (!used[g[i][j]] && (rand()%6))
  72.                     {
  73.                         used[g[i][j]] = 1;
  74.                         q.push(g[i][j]);
  75.                     }
  76.                     x[color[g[i][j]]]++;
  77.                     if (isM[g[i][j]])
  78.                         f[color[g[i][j]]] = 1;
  79.                 }
  80.                 if (f[1] && f[2] && f[3])
  81.                 {
  82.                     AC = 0;
  83.                 }
  84.                 int y = rand() % 3;
  85.                 if (y == 0)
  86.                 {
  87.                     if (!f[1] && (x[1] <= x[2] || f[2]) && (x[1] <= x[3] || f[3]))
  88.                     {
  89.                         color[i] = 1;
  90.                         if (x[1])
  91.                             isM[i] = 1;
  92.                     }
  93.                     else if (!f[2] && (x[2] <= x[1] || f[1]) && (x[2] <= x[3] || f[3]))
  94.                     {
  95.                         color[i] = 2;
  96.                         if (x[2])
  97.                             isM[i] = 1;
  98.                     }
  99.                     else
  100.                     {
  101.                         color[i] = 3;
  102.                         if (x[3])
  103.                             isM[i] = 1;
  104.                     }
  105.                 }
  106.                 else if (y == 1)
  107.                 {
  108.                     if (!f[3] && (x[3] <= x[1] || f[1]) && (x[3] <= x[2] || f[2]))
  109.                     {
  110.                         color[i] = 3;
  111.                         if (x[3])
  112.                             isM[i] = 3;
  113.                     }
  114.  
  115.                     else if (!f[1] && (x[1] <= x[3] || f[3]) && (x[1] <= x[2] || f[2]))
  116.                     {
  117.                         color[i] = 1;
  118.                         if (x[1])
  119.                             isM[i] = 3;
  120.                     }
  121.                     else
  122.                     {
  123.                         color[i] = 2;
  124.                         if (x[2])
  125.                             isM[i] = 3;
  126.                     }
  127.                 }
  128.                 else
  129.                 {
  130.                     if (!f[2] && (x[2] <= x[3] || f[3]) && (x[2] <= x[1] || f[1]))
  131.                     {
  132.                         color[i] = 2;
  133.                         if (x[2])
  134.                             isM[i] = 2;
  135.                     }
  136.  
  137.                     else if (!f[3] && (x[3] <= x[2] || f[2]) && (x[3] <= x[1] || f[1]))
  138.                     {
  139.                         color[i] = 3;
  140.                         if (x[3])
  141.                             isM[i] = 2;
  142.                     }
  143.                     else
  144.                     {
  145.                         color[i] = 1;
  146.                         if (x[1])
  147.                             isM[i] = 2;
  148.                     }
  149.                 }
  150.  
  151.  
  152.             }
  153.         }
  154.         for (int i = 0; i < n; i++)
  155.         {
  156.             vector<int> x(4,0);
  157.             for (int j = 0; j < g[i].size(); j++)
  158.                 x[color[g[i][j]]]++;
  159.             if (x[color[i]] > 1)
  160.             {
  161.                 AC = 0;
  162.             }
  163.         }
  164.         if (AC == 1)
  165.         {
  166.             for (int i = 0; i < n; i++)
  167.                 cout << color[i] << " ";
  168.             return 0;
  169.         }
  170.     }
  171.     cout << -1;
  172.    
  173. }
Advertisement
Add Comment
Please, Sign In to add comment