30分求调
查看原帖
30分求调
690320
MoGuYun_12楼主2024/7/13 00:06

记录

#include <bits/stdc++.h>

using namespace std;
#define N 100005

int n,cl[N],dp[N],s,cnt;
vector <int> e[N];

void dfs(int x,int fa){
	dp[x]=1;
	for(int i=0;i<e[x].size();i++){
		int y=e[x][i];
		if(y==fa) continue;
		dfs(y,x);
		if(cl[y]){
			cl[x]=1;
			dp[x]+=dp[y];
		}
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>cl[i];
		if(cl[i]) cnt++;
	}
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	for(int i=1;i<=n;i++){
		if(cl[i]){
			s=i;
			break;
		}
	}
	dfs(s,0);
	cout<<dp[s]-cnt;
	return 0;
}
2024/7/13 00:06
加载中...