제출 #846880

#제출 시각아이디문제언어결과실행 시간메모리
846880Ahmed57Inside information (BOI21_servers)C++17
50 / 100
466 ms130580 KiB
#include <bits/stdc++.h>
using namespace std;
int NODES=0;
bool seg[40000000];int L[40000000],R[40000000],n;
void update(int p, int q, int l, int r, int x)
{
    if(l==r){seg[p]=1;return;}
    int md = (l+r)/2;
    seg[p]=1;
    if(x<=md)R[p]=R[q],L[p]=++NODES,update(L[p],L[q],l,md,x);
    else L[p]=L[q],R[p]=++NODES,update(R[p],R[q],md+1,r,x);
}
bool query(int p,int l,int r,int x){
    if(l==r){
        return seg[p];
    }
    int md=(l+r)/2;
    if(x<=md)return query(L[p],l,md,x);
    else return query(R[p],md+1,r,x);
}
vector<int> v;
void iterate(int p,int l,int r){
    if(!seg[p])return;
    if(l==r)v.push_back(l);
    else{
        int md=(l+r)/2;
        iterate(L[p],l,md);
        iterate(R[p],md+1,r);
    }
}
int pr[125001];
int gs[125001];
void merg(int a,int b){
    if(gs[a]>gs[b])swap(a,b);
    iterate(pr[a],1,n);int tm;
    for(auto x:v){
        tm = ++NODES;
        update(tm,pr[b],1,n,x);
        pr[b]=tm;
    }
    pr[a]=tm,pr[b]=tm,gs[b]+=gs[a],gs[a]=gs[b];
    v.clear();
}
int main(){
    int q; cin>>n>>q;
    for(int i = 1;i<=n;i++){
        pr[i] = ++NODES , gs[i] = 1;
    }
    for(int i = 1;i<=n;i++){
        int tm = ++NODES;
        update(tm,pr[i],1,n,i);
        pr[i]=tm;
    }
    q+=n-1;
    while(q--){
        char c;cin>>c;
        if(c=='S'){int a,b;cin>>a>>b;merg(a,b);}
        else{
            int a,b;cin>>a>>b;
            cout<<(query(pr[a],1,n,b)?"yes\n":"no\n");
        }
    }
}

컴파일 시 표준 에러 (stderr) 메시지

servers.cpp: In function 'void merg(int, int)':
servers.cpp:41:10: warning: 'tm' may be used uninitialized in this function [-Wmaybe-uninitialized]
   41 |     pr[a]=tm,pr[b]=tm,gs[b]+=gs[a],gs[a]=gs[b];
      |     ~~~~~^~~
#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...