제출 #766672

#제출 시각아이디문제언어결과실행 시간메모리
766672Pichon5Papričice (COCI20_papricice)C++17
50 / 110
1066 ms21752 KiB
#include <iostream> #include <vector> #include <set> #include <map> #include <algorithm> #include <string> #include <sstream> #include <fstream> #include <cmath> #include <queue> #include <stack> #include <unordered_map> #include <unordered_set> #include <bitset> #define lcm(a,b) (a/__gcd(a,b))*b #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(){ 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<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...