반응형
https://www.acmicpc.net/problem/4195
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <set>
using namespace std;
int unf[200002], sizes[2000002];
int Find(int x){
if (x==unf[x]) return x;
else return unf[x] = Find(unf[x]);
}
void Union(int a, int b){
a = Find(a);
b = Find(b);
if(a!=b){
if(sizes[a]<sizes[b]) swap(a,b);
sizes[a] += sizes[b];
unf[b] = a;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
for(int T=0; T<t; T++){
int a;
map<string, int> m;
int node = 1;
string s1, s2;
cin >> a;
for(int i=0; i<200002;i++){
unf[i] = i;
sizes[i] = 1;
}
for(int i=0; i<a; i++){
cin >> s1 >> s2;
if(m.count(s1)==0) m[s1]=node++;
if(m.count(s2)==0) m[s2]=node++;
Union(m[s1],m[s2]);
cout << max(sizes[Find(m[s1])], sizes[Find(m[s2])]) << '\n';
}
}
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 15650번: N과 M (2) - 순열의 조합 문제 DFS로 풀기 (0) | 2022.01.22 |
---|---|
백준 7490번 : 0 만들기 - DFS (0) | 2022.01.21 |
백준 15811번 : 복면산?! - 복면산 DFS 문제 (0) | 2022.01.21 |
백준 1238번 : 파티 - 다익스트라 알고리즘 활용 문제 (0) | 2022.01.20 |
백준 1717번 : 집합의 표현 - Union&Find algorithm (0) | 2022.01.18 |