Submission #1217478

#TimeUsernameProblemLanguageResultExecution timeMemory
1217478shenfe1Inside information (BOI21_servers)C++20
48 / 100
1738 ms57772 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<array<int,3>> qr[MAX];
bool is[MAX];
int ans[MAX];
int use[MAX];
vector<int> top;

void dfs(int v){
    use[v]=1;
    for(auto to:g[v]){
        if(!use[to])dfs(to);
    }
    top.pb(v);
}

ull dp[MAX];

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[(y-1)/64].pb({f[x].back(),y,++cnt});
        }
    }
    for(int i=1;i<=cur;i++){
        if(!use[i])dfs(i);
    }
    for(int l=1;l<=n;l+=64){
        for(int v:top){
            if(l<=v&&v<min(n+1,l+64)){
                dp[v]=(1ull<<(v-l));
            }
            else{
                dp[v]=0;
                for(auto to:g[v]){
                    dp[v]|=dp[to];
                }
            }
        }
        for(auto [v,to,id]:qr[l/64]){
            if((dp[v]>>(to-l)&1))ans[id]=1;
        }
    }
    for(int i=1;i<=cnt;i++){
        if(ans[i])cout<<"yes\n";
        else cout<<"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...