728x90
반응형
목록을 set에 저장해서 번호 부여해서 유니온 파인드
#include<map>
#include<iostream>
#include<set>
#include<vector>
using namespace std;
vector<int>parent;
int find(int node){
if(parent[node]<0)return node;
return parent[node]=find(parent[node]);
}
int unions(int x,int y){
int xp=find(x);
int yp=find(y);
if(xp==yp)return abs(parent[xp]);
if(parent[xp]<parent[yp]){
parent[xp]+=parent[yp];
parent[yp]=xp;
return abs(parent[xp]);
}
else{
parent[yp]+=parent[xp];
parent[xp]=yp;
return abs(parent[yp]);
}
}
int main(){
int t,n;
cin>>t;
while(t--){
set<string>s;
cin>>n;
string a,b;
vector<pair<string,string>>arr;
for(int i=0;i<n;i++){
cin>>a>>b;
arr.push_back({a,b});
s.insert(a);
s.insert(b);
}
map<string,int>num;
//번호 부여
int cnt=1;
for(auto it=s.begin();it!=s.end();it++){
num[*it]=cnt;cnt++;
}
parent.assign(s.size()+1,-1);
for(int i=0;i<n;i++){
cout<<unions(num[arr[i].first],num[arr[i].second])<<'\n';
}
}
}
728x90
반응형
'하루 1문제 챌린지 > Gold2' 카테고리의 다른 글
백준 7453번 합이 0인 네 정수(C++) (0) | 2024.07.07 |
---|---|
백준 10775번 공항(C++)🚩🚩 (0) | 2024.02.29 |
백준 2637 장난감 조립 (C++) (1) | 2024.01.31 |