Submission #872775

#TimeUsernameProblemLanguageResultExecution timeMemory
872775DanetKlasika (COCI20_klasika)C++14
33 / 110
5012 ms2792 KiB
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") #define tof_io ios_base::sync_with_stdio(false);cin.tie(0) , cout.tie(0); #define double long double #define int long long #define pb push_back #define all(x) x.begin(),x.end() #define endl '\n' const int mod = 998244353; //998244353 1e9+7 1e9+9 const int inf = 1e18; const int N = 2e4 + 23; const int lg = 23; int fac[N]; int inv[N]; int dnt_pow (int a, int b, int md = mod){int ans = 1; while(b){if(b&1){ans = (a*ans)%md;}a = (a*a)%md;b >>= 1;}return ans ;} void dnt_bld (){fac[0] = 1; inv[0] = dnt_pow(fac[0],mod-2) ;for(int i = 1 ; i < N ; i++) {fac[i] = (fac[i-1] * i) % mod;inv[i] = dnt_pow( fac[i] , mod-2);}} int dnt_ncr (int r,int n){if(r>n) return 0; return fac[n] * inv[r] % mod * inv[n-r] % mod;} bool cmp (pair<int,int> a, pair<int,int> b){ return a.second > b.second; } vector<pair<int, int>> adj[N]; int vis[N]; int now; int ans = 0; void dfs1(int v, int pr, bool flag) { if(v == now) flag = true; if(flag) { vis[v] = 1; } for(auto u : adj[v]) { if(u.first != pr) { dfs1(u.first, v, flag); } } } void dfs(int v, int pr, int h) { if(vis[v]) ans = max(ans, h); for(auto u : adj[v]) { if(u.first != pr) { dfs(u.first, v, h ^ u.second); } } } int32_t main() { int q; cin >> q; string x; int a, b, sz = 1; while(q --) { cin >> x >> a >> b; if(x == "Add") { adj[a-1].pb(make_pair(sz, b)); adj[sz].pb(make_pair(a - 1, b)); sz++; } else { now = b - 1; for(int i = 0; i < sz; i++) { vis[i] = 0; } dfs1(0, -1, false); ans = 0; dfs(a - 1, -1, 0); cout << ans << endl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...