题解
2025-07-14 18:33:19
发布于:浙江
1阅读
0回复
0点赞
按照题意模拟
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=2e5+5,M=4e5+5;
int h[N],e[M],ne[M],idx;
int a[N],cnt;
void add(int x,int y) {
e[idx]=y,ne[idx]=h[x],h[x]=idx++;
}
void dfs(int u,int f) {
int flag=1;
if (a[u]==a[f]) flag=0;
for (int i=h[u];~i;i=ne[i]) {
int v=e[i];
if (v==f) continue;
dfs(v,u);
if (a[v]==a[u]) {
flag=0;
}
}
cnt+=flag;
}
int main() {
memset(h,-1,sizeof h);
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++) {
scanf("%d",&a[i]);
}
for (int i=1;i<n;i++) {
int x,y;
scanf("%d %d",&x,&y);
add(x,y);
add(y,x);
}
dfs(1,0);
printf("%d",cnt);
return 0;
}
这里空空如也
有帮助,赞一个