Submission #73098

#TimeUsernameProblemLanguageResultExecution timeMemory
73098khohkoMin-max tree (BOI18_minmaxtree)C++17
100 / 100
495 ms43180 KiB
#include <bits/stdc++.h> //#pragma GCC optimize("O3") using namespace std; #define ll int #define pb push_back #define fr first #define sc second #define MAX ((ll)(1e9+100)) #define MX ((ll)(7e4+100)) #define ARRS ((ll)(2e5+100)) #define HS ((ll)(233)) #define MOD ((ll)(1e9+7)) #define EP ((double)(1e-9)) #define LG 21 #define mul(a,b) a=((a)*(b))%MOD using namespace std; ll n,m,q; vector<ll> v[ARRS]; vector<ll> g[ARRS]; set<ll> *st[ARRS]; ll pas[ARRS]; ll mn[ARRS]; ll mx[ARRS]; ll pr[ARRS]; map<ll,ll> mp; void go(ll x,ll p){ pr[x]=p; st[x]=new set<ll>(); for(auto k:g[x]) st[x]->insert(k); for(auto y:v[x]){ if(y==p)continue; go(y,x); if(st[x]->size()<st[y]->size())swap(st[x],st[y]); for(auto k:*st[y]){ if(st[x]->find(k)!=st[x]->end()) st[x]->erase(k); else st[x]->insert(k); } } st[x]->insert(0); st[x]->insert(MAX); mx[x]=*st[x]->upper_bound(0); mn[x]=-(*st[x]->begin()); if(mx[x]==MAX)mx[x]=0; } map<ll,ll> f; ll mv(ll x){ if(x==-1)return 0; if(x==0)return 1; //if(f[x]==2)return 0; //if(!f[x]){ //f[x]=1; if(!f[mn[x]]){ f[mn[x]]=1; if(mv(mp[mn[x]])){ pas[x]=mn[x]; mp[mn[x]]=x; return 1; } } //} // f[x]=2; if(!f[mx[x]]){ f[mx[x]]=1; if(mv(mp[mx[x]])){ pas[x]=mx[x]; mp[mx[x]]=x; return 1; } } return 0; } int main(){ #ifdef KHOKHO freopen("in.in","r",stdin); freopen("out.out","w",stdout); #endif // KHOKHO ios::sync_with_stdio(0); cin>>n; for(int i=0; i<n-1; i++){ ll k,p; cin>>k>>p; v[k].pb(p); v[p].pb(k); } cin>>q; ll te=q; while(q--){ char ch; ll l,r,x; cin>>ch>>l>>r>>x; x++; if(ch=='m'){ g[l].pb(-x); g[r].pb(-x); } else { g[l].pb(x); g[r].pb(x); } } go(1,0); mp[0]=-1; ll p=0; for(int i=2; i<=n; i++){ f.clear(); p+=mv(i); } //cout<<p<<" "<<te<<endl; for(int i=2; i<=n; i++){ if(!pas[i]){ pas[i]=100; if(mn[i])pas[i]=mn[i]; if(mx[i])pas[i]=mx[i]; } cout<<i<<" "<<pr[i]<<" "<<pas[i]-1<<endl; } }

Compilation message (stderr)

minmaxtree.cpp: In function 'int main()':
minmaxtree.cpp:97:5: warning: unused variable 'te' [-Wunused-variable]
  ll te=q;
     ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...