Submission #766682

#TimeUsernameProblemLanguageResultExecution timeMemory
766682Pichon5Papričice (COCI20_papricice)C++14
50 / 110
1076 ms21680 KiB
#include <bits/stdc++.h> #define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define ll long long int #define vi vector<int> #define vll vector<ll> #define pb push_back #define F first #define S second #define mp make_pair using namespace std; const int tam=200005; vi G[tam]; int sz[tam]; multiset<int> todos; int res=1e9; void init(int nodo, int ant){ sz[nodo]=1; for(auto x:G[nodo]){ if(x!=ant){ init(x,nodo); sz[nodo]+=sz[x]; } } } int n; void dfs(int nodo, int ant){ for(auto it : G[nodo]){ if(it==ant)continue; int tami=sz[it]; int falta=n-tami; auto it2=todos.lower_bound((n-sz[it])/2); if(it2!=todos.end()){ int val=(*it2); int ahora=max({val,falta-val,tami})-min({val,falta-val,tami}); res=min(res,ahora); } if(it2!=todos.begin()){ it2--; int val=(*it2); int ahora=max({val,falta-val,tami})-min({val,falta-val,tami}); res=min(res,ahora); } dfs(it,nodo); } if(ant!=-1){ todos.insert(sz[nodo]); } } int main(){ fast int a,b; cin>>n; for(int i=1;i<n;i++){ cin>>a>>b; G[a].pb(b); G[b].pb(a); } for(int i=1;i<=10;i++){ todos.clear(); int cual=rand()%n+1; init(cual,-1); dfs(cual,-1); } cout<<res<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...