解題心得
額外開一個陣列來記錄該 set 的數量,要找 root(老大) 才是最新的數量。
程式碼
#include <iostream> using namespace std; int n, p[1000000] = { 0 }, num[1000000] = { 0 }; int find_set(int v) { if (p[v] == v) return v; return p[v] = find_set(p[v]); } void init() { for (int i = 0; i < 1000000; i++) p[i] = i, num[i] = 1; } int main() { int m, a, b; while (cin >> n >> m) { int ans = 1; init(); while (m--) { cin >> a >> b; a = find_set(a), b = find_set(b); if (a != b) { num[b] += num[a]; p[a] = b; // a 指向 b ans = max(ans, num[b]); } } cout << ans << endl; } return 0; }
沒有留言:
張貼留言