# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
574574 | FatihSolak | Min-max tree (BOI18_minmaxtree) | C++17 | 850 ms | 75076 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define N 200005
#define K 20
using namespace std;
vector<int> adj[N];
map<pair<int,int>,pair<int,int>> edge;
set<int> s[N][2];
map<int,bool> needed;
void dfs1(int v,int pr){
for(auto u:adj[v]){
if(u == pr)continue;
dfs1(u,v);
for(int i = 0;i<2;i++){
if(s[u][i].size() > s[v][i].size()){
swap(s[u][i],s[v][i]);
}
for(auto c:s[u][i]){
if(s[v][i].count(c))s[v][i].erase(c);
else s[v][i].insert(c);
}
}
}
if(s[v][0].size()){
edge[{min(v,pr),max(v,pr)}].first = max(edge[{min(v,pr),max(v,pr)}].first,*s[v][0].rbegin());
}
if(s[v][1].size()){
edge[{min(v,pr),max(v,pr)}].second = min(edge[{min(v,pr),max(v,pr)}].second,*s[v][1].begin());
}
}
void solve(){
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |