28.染色
描述:

思想:
采用并查集的思想,使用vector容器保存最初始的对应关系,使用一个无序map表来进行合并操作。unordered_map<int, list
代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,q,x,y;
cin >> n;
vector<int> datas(n+1);
unordered_map<int, list<int>> cnt;
for(int i = 1;i <= n;i++){
cin >> datas[i];
cnt[datas[i]].push_back(i);
}
cin >> q;
while(q--){
cin >> x >> y;
if(x == y) continue;
// 合并
cnt[y].splice(cnt[y].end(), cnt[x]);
}
for(auto [x,index] : cnt){
for(auto i : index){
// 更新,i表示的是数组的下标,x表示的最终更新后的数据值
datas[i] = x;
}
}
for(int i = 1;i<=n;i++){
cout << datas[i] << " ";
}
return 0;
}

浙公网安备 33010602011771号