Advertisement
Kaidul

193 Graph Coloring

May 17th, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.97 KB | None | 0 0
  1. #include <algorithm>
  2. #include <bitset>
  3. #include <cctype>
  4. #include <cmath>
  5. #include <complex>
  6. #include <cstdio>
  7. #include <cstdlib>
  8. #include <cstring>
  9. #include <ctime>
  10. #include <deque>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <climits>
  14. #include <map>
  15. #include <memory>
  16. #include <queue>
  17. #include <set>
  18. #include <sstream>
  19. #include <stack>
  20. #include <string>
  21. #include <utility>
  22. #include <vector>
  23. #include <iomanip>
  24. using namespace std;
  25. /*** typedef ***/
  26. #define MEMSET_INF 127
  27. #define MEMSET_HALF_INF 63
  28. #define stream istringstream
  29. #define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
  30. #define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
  31. #define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
  32. #define INF (1<<30)
  33. #define PI acos(-1.0)
  34. #define pb push_back
  35. #define ppb pop_back
  36. #define all(x) x.begin(),x.end()
  37. #define mem(x,y) memset(x,y,sizeof(x))
  38. #define memsp(x) mem(x,MEMSET_INF)
  39. #define memdp(x) mem(x,-1)
  40. #define memca(x) mem(x,0)
  41. #define eps 1e-9
  42. #define pii pair<int,int>
  43. #define pmp make_pair
  44. #define ft first
  45. #define sd second
  46. #define vi vector<int>
  47. #define vpii vector<pii>
  48. #define si set<int>
  49. #define msi map<string , int >
  50. #define mis map<int , string >
  51. typedef long long i64;
  52. typedef unsigned long long ui64;
  53. /** function **/
  54. #define SDi(x) sf("%d",&x)
  55. #define SDl(x) sf("%lld",&x)
  56. #define SDs(x) sf("%s",x)
  57. #define SD2(x,y) sf("%d%d",&x,&y)
  58. #define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
  59. #define pf printf
  60. #define print(x) pf("%d ", x)
  61. #define println(x) pf("%d\n", x)
  62. #define sf scanf
  63. #define READ(f) freopen(f, "r", stdin)
  64.  
  65. /** Main Code **/
  66.  
  67. #define Max 101
  68.  
  69. vector <int> adj[Max];
  70. int vertex, edge;
  71. bool visited[Max];
  72. queue <int> q;
  73. int color[Max], temp[Max], black_node[Max];
  74. enum Color {transparent, white, black};
  75.  
  76. int bfs(int src) {
  77.     mem(visited, false);
  78.     mem(color, transparent);
  79.     visited[src] = true;
  80.     color[src] = black;
  81.     q.push(src);
  82.     int u, v;
  83.     int b = 0;
  84.     while(!q.empty()) {
  85.         u = q.front(), q.pop();
  86.         if(color[u] == black) {
  87.             temp[b++] = u;
  88.         }
  89.         rep(i, (int)adj[u].size()) {
  90.             v = adj[u][i];
  91.             color[v] = color[u] == white ? black : white;
  92.             if(!visited[v]) {
  93.                 q.push(v);
  94.                 visited[v] = true;
  95.             }
  96.         }
  97.     }
  98.     return b;
  99. }
  100.  
  101. int main() {
  102. #ifndef ONLINE_JUDGE
  103.     READ("input.txt");
  104. #endif
  105.     int tcase, max, r;
  106.     int u, v;
  107.     SDi(tcase);
  108.     while(tcase--) {
  109.         SD2(vertex, edge);
  110.         rep(i, edge) SD2(u, v), adj[u].pb(v), adj[v].pb(u);
  111.         max = INT_MIN;
  112.         FOR(i, 1, vertex) {
  113.             r = bfs(i);
  114.             if(r > max) {
  115.                 max = r;
  116.                 rep(i, r) black_node[i] = temp[i];
  117.             }
  118.         }
  119.         println(max);
  120.         rep(i, max) {
  121.             pf("%d", black_node[i]);
  122.             if(i < max) pf(" ");
  123.         }
  124.         pf("\n");
  125.         rep(i, vertex + 10) adj[i].clear();
  126.     }
  127.     return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement