Tuesday, August 25, 2015

UVa 10608 - Friends

// UVa 10608 - Friends

#include <iostream>
using namespace std;

int color[30001], count[30001], next[30001], start[30001], end[30001];

void paint(int a, int b) {
	for (int j = start[a]; j != 0; j = next[j])
		color[j] = b;
	count[b] += count[a];
	next[end[b]] = start[a];
	end[b] = end[a];
}

int main() {
	int t;
	for (cin >> t; t; t--) {
		int n, m;
		cin >> n >> m;
		for (int i = 1; i <= n; i++) {
			color[i] = i;
			count[i] = 1;
			next[i] = 0;
			start[i] = i;
			end[i] = i;
		}
		for (; m; m--) {
			int a, b;
			cin >> a >> b;
			if (color[a] == color[b])
				continue;
			if (count[color[a]] < count[color[b]])
				paint(color[a], color[b]);
			else
				paint(color[b], color[a]);
		}
		int sol = min(1, n);
		for (int i = 1; i <= n; i++)
			if (count[color[i]] > sol)
				sol = count[color[i]];
		cout << sol << endl;
	}
	return 0;
}

No comments:

Post a Comment