Submission #1363313

#TimeUsernameProblemLanguageResultExecution timeMemory
1363313yyc000123Tourists (EGOI22_tourists)C++20
0 / 100
1 ms344 KiB
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int N = 2e5+5 ;
const int M = 2005 ; // 2e5+5 ;
const int Q = 2005 ; // 2e5+5 ;
int n , m , q , arr[M] , deep[N] , anc[N][(int)log2(N)+5] ;
ll opi[M] ;
vector<int> nei[N] ;

void dfs(int node){
    for(int i:nei[node]){
        if(i==anc[node][0]) continue ;
        deep[i] = deep[node]+1 ; anc[i][0] = node ; dfs(i) ;
    }
}

int flca(int a , int b){
    if(deep[a]<deep[b]) swap(a,b) ;
    int diff = deep[a]-deep[b] ;
    for(int i=0 ; i<=log2(n)+1 ; i++){
        if((diff>>i)&1) a = anc[a][i] ;
    }
    if(a==b) return a ;
    for(int i=log2(n)+1 ; i>=0 ; i--){
        if(anc[a][i]!=anc[b][i]) a = anc[a][i] , b = anc[b][i] ;
    }
    return anc[a][0] ;
}

int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
    cin >> n >> m >> q ;
    for(int i=1 ; i<=m ; i++) cin >> arr[i] ;
    for(int i=1 ; i<n ; i++){
        int a , b ; cin >> a >> b ;
        nei[a].push_back(b) ; nei[b].push_back(a) ;
    }
    dfs(1) ;
    for(int j=1 ; j<=log2(n)+1 ; j++){
        for(int i=1 ; i<=n ; i++) anc[i][j]=anc[anc[i][j-1]][j-1] ;
    }
    while(q--){
        char c ; cin >> c ;
        if(c=='t'){
            int l , r , c ; cin >> l >> r >> c ;
            for(int i=l ; i<=r ; i++){
                int lca = flca(arr[i],c) ;
                opi[i]-=deep[arr[i]]+deep[c]-2*deep[lca] ;
                arr[i]=c ;
            }
        }
        else if(c=='e'){
            int c , d ; cin >> c >> d ;
            for(int i=1 ; i<=n ; i++){
                if(arr[i]==c) opi[i]+=d ;
            }
        }
        else{
            int v ; cin >> v ;
            cout << opi[v] << '\n' ;
        }
    }
    return 0 ;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...