Submission #1217474

#TimeUsernameProblemLanguageResultExecution timeMemory
1217474shenfe1Inside information (BOI21_servers)C++20
2 / 100
103 ms58816 KiB
#include <bits/stdc++.h>

#pragma GCC optimize("Ofast")
// #pragma GCC target("avx2")

using namespace std;

#define ll long long
#define ld long double
#define pb push_back
#define sz(s) (int)s.size()
#define all(v) v.begin(),v.end()
#define pii pair<int,int>
#define ull unsigned ll
// #define int ll

void chmin(int &x,int y){x=min(x,y);}

const int MAX=6e5+10;
const int mod=1e9+7;
// const int inf=1e18;

int n,q;
vector<int> f[MAX];
vector<int> g[MAX];
vector<pii> qr[MAX];
int tin[MAX],tout[MAX],timer;
int ans[MAX];

void dfs(int v){
    tin[v]=++timer;
    for(auto to:g[v]){
        dfs(to);
    }
    tout[v]=timer;
}

bool par(int a,int b){
    return (tin[a]<=tin[b]&&tout[b]<=tout[a]);
}

void solve(){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        f[i].pb(i);
    }
    int cur=n;
    int cnt=0;
    for(int T=1;T<=q+n-1;T++){
        char c;
        int x,y;
        cin>>c>>x>>y;
        if(c=='S'){
            cur++;
            g[cur].pb(f[x].back());
            g[cur].pb(f[y].back());
            f[x].pb(cur);
            f[y].pb(cur);
        }
        else{
            qr[f[x].back()].pb({y,++cnt});
        }
    }
    dfs(cur);
    for(int i=1;i<=cur;i++){
        for(auto [to,id]:qr[i]){
            if(par(i,to))ans[id]=1;
        }
    }
    for(int i=1;i<=cnt;i++){
        cout<<(ans[i]?"yes":"no")<<"\n";
    }
}

signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    long double T=clock();
    int t=1;
    // cin>>t;
    while(t--)solve();
    // cerr<<"Runtime: "<<(clock()-T)/CLOCKS_PER_SEC<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...