답안 #637937

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
637937 2022-09-03T16:08:30 Z Iwanttobreakfree Klasika (COCI20_klasika) C++17
33 / 110
51 ms 13500 KB
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int best=0;
vector<map<int,int>> trie(1);
void add(int u,int x){
    for(int i=30;i>=0;i--){
        if(trie[u].find(x&(1<<i))==trie[u].end()){
                map<int,int> mp;
                trie[u][x&(1<<i)]=trie.size();
                trie.push_back(mp);
        }
        u=trie[u][x&(1<<i)];
    }
}
int maxi(int u,int x){
    int ans=0;
    for(int i=30;i>=0;i--){
        int to=x&(1<<i);
        if(trie[u].find(to^(1<<i))!=trie[u].end()){
            ans+=to;
            u=trie[u][to^(1<<i)];
        }else u=trie[u][to];
    }
    return ans;
}
int bin_jump_dist(int a,int dif,vector<vector<int>>& par,vector<vector<int>>& dist){
    int ans=0;
    for(int i=18;i>=0;i--){
        if(dif&(1<<i)){
            ans^=dist[a][i];
            a=par[a][i];
        }
    }
    return ans;
}
int bin_jump_node(int a,int dif,vector<vector<int>>& par,vector<vector<int>>& dist){
    int ans=0;
    for(int i=18;i>=0;i--){
        if(dif&(1<<i)){
            ans^=dist[a][i];
            a=par[a][i];
        }
    }
    return a;
}
int LCA(int x,int y,vector<vector<int>>& par,vector<vector<int>>& dist,vector<int>& depth){
    if(depth[x]>depth[y])swap(x,y);
    int ans=bin_jump_dist(y,depth[y]-depth[x],par,dist);
    y=bin_jump_node(y,depth[y]-depth[x],par,dist);
    //cout<<ans<<'\n';
    if(x==y)return ans;
    for(int i=18;i>=0;i--){
        if(par[x][i]!=par[y][i]){
            ans^=dist[x][i];
            ans^=dist[y][i];
            x=par[x][i];
            y=par[y][i];
        }
    }
    return ans^dist[x][0]^dist[y][0];
}
void dfs(int a,vector<vector<pair<int,int>>>& g,int cnt,int sol){
    best=max(best,cnt^sol);
    for(auto x:g[a]){
        dfs(x.first,g,cnt^x.second,sol);
    }
}
int main(){
    int q,x,y,sz=1;
    string s;
    vector<vector<int>> par(1,vector<int>(19));
    vector<vector<int>> w(1,vector<int>(19));
    vector<int> depth(1),root1(1);
    for(int i=0;i<19;i++)par[0][i]=0;
    vector<vector<pair<int,int>>> g(3000,vector<pair<int,int>>());
    cin>>q;
    for(int qu=0;qu<q;qu++){
        cin>>s>>x>>y;
        if(s=="Add"){
            x--;
            g[x].push_back({par.size(),y});
            depth.push_back(depth[x]+1);
            root1.push_back(y^root1[x]);
            add(0,root1.back());
            vector<int> parx(19),wx(19);
            wx[0]=y;
            parx[0]=x;
            for(int i=1;i<19;i++){
                parx[i]=par[parx[i-1]][i-1];
                wx[i]=w[parx[i-1]][i-1]^wx[i-1];
                //cout<<wx[i]<<' ';
            }
            //cout<<wx[0]<<'\n';
            par.push_back(parx);
            w.push_back(wx);

        }
        else{
            x--;y--;
            int sol=sol=LCA(x,y,par,w,depth);
            best=sol;
            //cout<<sol<<'\n';
            if(q>5000)best=maxi(0,best);
            else dfs(y,g,0,sol);
            cout<<best<<'\n';
        }
    }
}

Compilation message

klasika.cpp: In function 'int main()':
klasika.cpp:102:24: warning: operation on 'sol' may be undefined [-Wsequence-point]
  102 |             int sol=sol=LCA(x,y,par,w,depth);
      |                     ~~~^~~~~~~~~~~~~~~~~~~~~
klasika.cpp:71:15: warning: unused variable 'sz' [-Wunused-variable]
   71 |     int q,x,y,sz=1;
      |               ^~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 724 KB Output is correct
4 Correct 1 ms 724 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 1 ms 468 KB Output is correct
7 Correct 1 ms 724 KB Output is correct
8 Correct 1 ms 724 KB Output is correct
9 Correct 1 ms 468 KB Output is correct
10 Correct 1 ms 596 KB Output is correct
11 Correct 1 ms 724 KB Output is correct
12 Correct 1 ms 724 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 724 KB Output is correct
4 Correct 1 ms 724 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 1 ms 468 KB Output is correct
7 Correct 1 ms 724 KB Output is correct
8 Correct 1 ms 724 KB Output is correct
9 Correct 1 ms 468 KB Output is correct
10 Correct 1 ms 596 KB Output is correct
11 Correct 1 ms 724 KB Output is correct
12 Correct 1 ms 724 KB Output is correct
13 Correct 7 ms 1680 KB Output is correct
14 Correct 11 ms 2868 KB Output is correct
15 Correct 10 ms 3208 KB Output is correct
16 Correct 11 ms 5412 KB Output is correct
17 Correct 6 ms 1660 KB Output is correct
18 Correct 7 ms 2944 KB Output is correct
19 Correct 7 ms 3080 KB Output is correct
20 Correct 7 ms 3848 KB Output is correct
21 Correct 6 ms 1616 KB Output is correct
22 Correct 7 ms 2824 KB Output is correct
23 Correct 7 ms 3080 KB Output is correct
24 Correct 8 ms 3848 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 51 ms 13500 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 1 ms 468 KB Output is correct
3 Correct 1 ms 724 KB Output is correct
4 Correct 1 ms 724 KB Output is correct
5 Correct 1 ms 468 KB Output is correct
6 Correct 1 ms 468 KB Output is correct
7 Correct 1 ms 724 KB Output is correct
8 Correct 1 ms 724 KB Output is correct
9 Correct 1 ms 468 KB Output is correct
10 Correct 1 ms 596 KB Output is correct
11 Correct 1 ms 724 KB Output is correct
12 Correct 1 ms 724 KB Output is correct
13 Correct 7 ms 1680 KB Output is correct
14 Correct 11 ms 2868 KB Output is correct
15 Correct 10 ms 3208 KB Output is correct
16 Correct 11 ms 5412 KB Output is correct
17 Correct 6 ms 1660 KB Output is correct
18 Correct 7 ms 2944 KB Output is correct
19 Correct 7 ms 3080 KB Output is correct
20 Correct 7 ms 3848 KB Output is correct
21 Correct 6 ms 1616 KB Output is correct
22 Correct 7 ms 2824 KB Output is correct
23 Correct 7 ms 3080 KB Output is correct
24 Correct 8 ms 3848 KB Output is correct
25 Runtime error 51 ms 13500 KB Execution killed with signal 11
26 Halted 0 ms 0 KB -