#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int a[N],n,black,fi,ans;
vector<int>g[N];
void dfs(int i,int fa,int l){
if(a[i]==1){
ans+=l;
ans--;
l=0;
}
for(auto x:g[i]){
if(x==fa){
continue;
}
dfs(x,i,l+1);
}
return;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]==1){
black++;
if(fi==0){
fi=i;
}
}
}
for(int i=1;i<=n-1;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(fi,-1,0);
cout<<ans+1;
return 0;
}
思路是枚举两个黑点之间的距离(在dfs里)。
大佬求带,十个样例点没过,求改进。