Submission #372493

#TimeUsernameProblemLanguageResultExecution timeMemory
372493Atill83Uzastopni (COCI15_uzastopni)C++14
160 / 160
22 ms11244 KiB
#include <bits/stdc++.h> #define ff first #define ss second #define endl '\n' using namespace std; const long long INF = (long long) 1e18; const int mod = (int) 1e9+7; const int MAXN = (int) 3e5+5; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> pll; ll n; int joke[MAXN]; vector<int> adj[MAXN]; bool vr[MAXN]; pair<vector<int>, vector<int>> dfs(int v){ vector<pair<int, pair<vector<int>, vector<int>>>> ls, gr; vector<bool> can(101, 0); for(int j: adj[v]){ auto c = dfs(j); if(joke[j] < joke[v]){ ls.push_back({joke[j], c}); }else if(joke[j] > joke[v]) gr.push_back({joke[j], c}); } sort(ls.begin(), ls.end(), [](auto u, auto v){ return u.ff > v.ff; }); sort(gr.begin(), gr.end(), [](auto u, auto v){ return u.ff < v.ff; }); can[joke[v]] = 1; for(auto &u: ls){ bool cn = 0; for(auto x: u.ss.ss){ if(x < joke[v] && can[x + 1]){ cn = 1; break; } } if(cn){ for(auto x: u.ss.ff){ can[x] = 1; } } } for(auto &u: gr){ bool cn = 0; for(auto x: u.ss.ff){ if(x > joke[v] && can[x - 1]){ cn = 1; break; } } if(cn){ for(auto x: u.ss.ss){ can[x] = 1; } } } vector<int> sl, sg; for(int i = 1; i <= joke[v]; i++){ if(can[i]) sl.push_back(i); } for(int i = joke[v]; i <= 100; i++){ if(can[i]) sg.push_back(i); } return make_pair(sl, sg); } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr); #ifdef Local freopen("C:/Users/Admin/Desktop/Yazilim/C/IO/int.txt","r",stdin); freopen("C:/Users/Admin/Desktop/Yazilim/C/IO/out.txt","w",stdout); #endif cin>>n; for(int i = 1; i <= n; i++){ cin>>joke[i]; } for(int i = 0; i < n - 1; i++){ int a, b; cin>>a>>b; adj[a].push_back(b); } auto ans = dfs(1); cout<<(ans.ff.size()) * (ans.ss.size()); #ifdef Local cout<<endl<<fixed<<setprecision(2)<<1000.0 * clock() / CLOCKS_PER_SEC<< " milliseconds "; #endif }
#Verdict Execution timeMemoryGrader output
Fetching results...