解題心得
這題沒給 n 的大小,好像不合理.....
而且最後用黑魔法才過的。
程式碼
#include <iostream> using namespace std; int f[10000] = { 0 }, Size[10000] = { 0 }; int find_set(int v) { if (f[v] == v) return v; return f[v] = find_set(f[v]); } void union_by_size(int u, int v) { /*if (Size[u] > Size[v]) swap(u, v); Size[v] += Size[u];*/ f[u] = v; } int main() { cin.sync_with_stdio(false); cin.tie(NULL); int n, k, a, b; while (cin >> n >> k) { int group = n; // 幾個小圈圈 for (int i = 0; i < n; i++) f[i] = i, Size[i] = 1; while (k--) { cin >> a >> b; a = find_set(a), b = find_set(b); if (a != b) { group--; union_by_size(a, b); } } cout << group << endl; } return 0; }
沒有留言:
張貼留言