#include<bits/stdc++.h>
using namespace std;
int col[100001];
struct tree{
int k;
int f;
}node[100001];
queue<int> q;
int main(){
int n;
cin>>n;
int whitecnt=0;
for(int i=1;i<=n;i++){
cin>>col[i];
if(!col[i])whitecnt++;
}
for(int i=1;i<n;i++){
int l,r;
cin>>l>>r;
node[r].f=l;
node[l].k++;
}
for(int i=1;i<=n;i++){
if(!node[i].k&&!col[i])q.push(i);
}
while(!q.empty()){
int p=q.front();
q.pop();
node[node[p].f].k--;
whitecnt--;
if(!col[node[p].f]&&!node[node[p].f].k)q.push(node[p].f);
}
cout<<whitecnt;
return 0;
}
思路:白色叶节点入队
将所有白色叶节点删除,将他们的爸爸的孩子数量统计都-1,再看还有木有白色孩子数量为0的节点