Submission #1319723

#TimeUsernameProblemLanguageResultExecution timeMemory
1319723ee23b179_cpUzastopni (COCI15_uzastopni)C++20
160 / 160
52 ms23968 KiB
#include <bits/stdc++.h> using namespace std; const int N=10005; int n,v[N]; vector<int> g[N]; vector<pair<int,int>> s[N]; bitset<101> B[N][101]; vector<int> q[101]; void dfs(int u,int p){ for(int x:g[u]) if(x!=p) dfs(x,u); for(int i=1;i<=100;i++) q[i].clear(); for(int x:g[u]) if(x!=p) for(auto &e:s[x]) q[e.first].push_back(e.second); for(int l=100;l>=1;l--){ if(l==v[u]){ B[u][l]|=B[u][l+1]; B[u][l].set(l); }else{ for(int r:q[l]) if(r<v[u]||l>v[u]){ B[u][l]|=B[u][r+1]; B[u][l].set(r); } } if(l<=v[u]) for(int r=100;r>=l;r--) if(v[u]>=l&&v[u]<=r&&B[u][l][r]) s[u].push_back({l,r}); } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n; for(int i=1;i<=n;i++) cin>>v[i]; for(int i=1,u,w;i<n;i++){ cin>>u>>w; g[u].push_back(w); g[w].push_back(u); } dfs(1,0); cout<<s[1].size(); }
#Verdict Execution timeMemoryGrader output
Fetching results...