輸入多組測試用例,每組給出 m 條好友關係(字符串名字),每加入一條關係後,輸出該社交網絡當前的總人數(即所在連通分量大小)。
const int MAXN = 200005; // 2*m 上限
int fa[MAXN], sz[MAXN];
unordered_map id_map;
int idx = 0;
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void unite(int a, int b) {
a = find(a); b = find(b);
if (a != b) {
fa[a] = b;
sz[b] += sz[a];
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin >> T;
while (T--) {
int m; cin >> m;
id_map.clear(); idx = 0;
for (int i = 0; i < m; ++i) {
string a, b; cin >> a >> b;
if (!id_map.count(a)) { id_map[a] = ++idx; fa[idx] = idx; sz[idx] = 1; }
if (!id_map.count(b)) { id_map[b] = ++idx; fa[idx] = idx; sz[idx] = 1; }
unite(id_map[a], id_map[b]);
cout << sz[find(id_map[a])] << '\n';
}
}
}