//UVa 10583 - Ubiquitous Religions #include <iostream> #include <vector> #include <stdio.h> using namespace std; vector<int> have[50001]; int color[50001]; int count[50001]; void paint(int c1, int c2) { for (int j = 0; j < have[c1].size(); j++) { color[have[c1][j]] = c2; have[c2].push_back(have[c1][j]); } have[c1].clear(); count[c2] += count[c1]; count[c1] = 0; } int main() { int n, m, t = 0; while ((cin >> n >> m) && (n || m)) { t++; for (int i = 1; i <= n; i++) { color[i] = i; count[i] = 1; have[i].clear(); have[i].push_back(i); } int sol = n; for (int j = 0; j < m; j++) { int a, b; cin >> a >> b; if (color[a] != color[b]) { if (count[color[a]] < count[color[b]]) paint(color[a], color[b]); else paint(color[b], color[a]); sol--; } } printf("Case %d: %d\n", t, sol); } return 0; }
Thursday, August 20, 2015
UVa 10583 - Ubiquitous Religions
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment