#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 time | Memory | Grader output |
|---|
| Fetching results... |