才30分?😥😥😥😥😥😥😥
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> a[100010];
int color[100010],n,u,v,low,cnt;
bool vis[100010];
int find(){
for(int i=1;i<=n;i++){
if(color[i]==1) return i;
}
return -1;
}
void dfs(int fa,int x){
vis[x]=true;
for(int i=0;i<a[x].size();i++){
if(vis[a[x][i]]==true) continue;
if(color[a[x][i]]==1&&color[x]==0) cnt++,color[x]=1;
dfs(x,a[x][i]);
if(color[fa]==0&&color[x]==1) cnt++,color[fa]=1;
}
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>color[i];
for(int i=1;i<n;i++){
cin>>u>>v;
a[u].push_back(v);
a[v].push_back(u);
}
low=find();
dfs(0,low);
cout<<cnt-1<<endl;
return 0;
}