Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <vector>
- using namespace std;
- const int Maxn = 10005;
- int t;
- int n, m;
- vector <int> neigh[Maxn];
- bool taken[Maxn];
- vector <int> cur;
- int res[Maxn];
- void Take(int v)
- {
- taken[v] = true; cur.push_back(v);
- for (int i = 0; i < neigh[v].size(); i++) {
- int u = neigh[v][i];
- if (!taken[u]) Take(u);
- }
- }
- int main()
- {
- scanf("%d", &t);
- for (int tc = 1; tc <= t; tc++) {
- scanf("%d %d", &n, &m);
- for (int i = 1; i <= n; i++) {
- neigh[i].clear(); taken[i] = false;
- }
- while (m--) {
- int a, b; scanf("%d %d", &a, &b);
- neigh[a].push_back(b); neigh[b].push_back(a);
- }
- for (int i = 1; i <= n; i++) if (!taken[i]) {
- cur.clear();
- Take(i);
- for (int i = 0; i < cur.size(); i++)
- res[cur[i]] = cur.size() - 1;
- }
- printf("Case #%d:\n", tc);
- for (int i = 1; i <= n; i++)
- printf("%d%c", res[i], i + 1 <= n? ' ': '\n');
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement