Submission #1227999

#TimeUsernameProblemLanguageResultExecution timeMemory
1227999MuhammadSaramMin-max tree (BOI18_minmaxtree)C++20
0 / 100
166 ms19676 KiB
#include <bits/stdc++.h> using namespace std; const int M = 70001, lg = 17; vector<int> nei[M]; // set<pair<int,int>> se[2]; vector<pair<int,int>> ad[M]; int par[M][lg],dep[M],ed[M]; void dfs(int u) { for (int p=1;p<lg;p++) par[u][p]=par[par[u][p-1]][p-1]; for (int i:nei[u]) if (i!=par[u][0]) par[i][0]=u,dep[i]=dep[u]+1,dfs(i); } int lca(int u,int v) { if (dep[u]>dep[v]) swap(u,v); int d=dep[v]-dep[u]; for (int p=0;p<lg;p++) if (d>>p&1) v=par[v][p]; if (u==v) return v; for (int p=lg-1;p>=0;p--) if (par[u][p]!=par[v][p]) u=par[u][p],v=par[v][p]; return par[u][0]; } set<int> se; void dfs1(int u) { for (int i:nei[u]) if (i!=par[u][0]) dfs1(i); for (auto [x,i]:ad[u]) if (i) se.insert(x); for (auto [x,i]:ad[u]) if (!i) se.erase(x); if (par[u][0]) { if (se.empty()) ed[u]=0; else ed[u]=*se.begin(); } } int main() { ios::sync_with_stdio(0); cin.tie(NULL),cout.tie(NULL); int n; cin>>n; for (int i=1;i<n;i++) { int u,v; cin>>u>>v; nei[u].push_back(v); nei[v].push_back(u); } dfs(1); int k; cin>>k; for (int i=0;i<k;i++) { char c; cin>>c; int u,v,x; cin>>u>>v>>x; int l=lca(u,v); ad[u].push_back({x,1}); ad[v].push_back({x,1}); ad[l].push_back({x,0}); } dfs1(1); for (int i=2;i<=n;i++) cout<<i<<' '<<par[i][0]<<' '<<ed[i]<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...