Advertisement
Guest User

Untitled

a guest
Sep 20th, 2014
573
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. const int Maxn = 10005;
  6.  
  7. int t;
  8. int n, m;
  9. vector <int> neigh[Maxn];
  10. bool taken[Maxn];
  11. vector <int> cur;
  12. int res[Maxn];
  13.  
  14. void Take(int v)
  15. {
  16.     taken[v] = true; cur.push_back(v);
  17.     for (int i = 0; i < neigh[v].size(); i++) {
  18.         int u = neigh[v][i];
  19.         if (!taken[u]) Take(u);
  20.     }
  21. }
  22.  
  23. int main()
  24. {
  25.     scanf("%d", &t);
  26.     for (int tc = 1; tc <= t; tc++) {
  27.         scanf("%d %d", &n, &m);
  28.         for (int i = 1; i <= n; i++) {
  29.             neigh[i].clear(); taken[i] = false;
  30.         }
  31.         while (m--) {
  32.             int a, b; scanf("%d %d", &a, &b);
  33.             neigh[a].push_back(b); neigh[b].push_back(a);
  34.         }
  35.         for (int i = 1; i <= n; i++) if (!taken[i]) {
  36.             cur.clear();
  37.             Take(i);
  38.             for (int i = 0; i < cur.size(); i++)
  39.                 res[cur[i]] = cur.size() - 1;
  40.         }
  41.         printf("Case #%d:\n", tc);
  42.         for (int i = 1; i <= n; i++)
  43.             printf("%d%c", res[i], i + 1 <= n? ' ': '\n');
  44.     }
  45.     return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement