Educational Codeforces Round 119 E

E. Replace the Numbers

开始想到了一个二分的做法 好像是O(nlog)的 后来才想了一下可以在两个数组之间反复横跳
那我是不是像记忆化搜索一样 记录一个路径即可
我们记录f[i]表示的就是当前i点的颜色为什么
显然我们正着做需要知道后面的状况 那我们就可以离线下来倒着做

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
const int M = 998244353;
const int mod = 998244353;
#define int long long
#define endl '\n'
#define all(x) (x).begin(),(x).end()
#define YES cout<<"YES"<<endl;
#define NO cout<<"NO"<<endl;
#define _ 0
#define pi acos(-1)
#define INF 0x3f3f3f3f3f3f3f3f
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);
vector<int>op(N),f(N),x(N),y(N);
void solve() {
    int q;cin>>q;
    for(int i=1;i<=N;i++)f[i]=i;
    for(int i=1;i<=q;i++){
        cin>>op[i];
        if(op[i]==1){
            cin>>x[i];
        }else {
            cin>>x[i]>>y[i];
        }
    }
    vector<int>ans;
    for(int i=q;i>=1;i--){
        if(op[i]==1){
            ans.push_back(f[x[i]]);
        }else{
            f[x[i]]=f[y[i]];
        }
    }
    for(int i=ans.size()-1;i>=0;i--)cout<<ans[i]<<' ';
}
signed main(){
    fast
    int T;T=1;
    while(T--) {
        solve();
    }
    return ~~(0^_^0);
}
posted @ 2022-09-21 21:20  ycllz  阅读(24)  评论(0)    收藏  举报