30求调
查看原帖
30求调
591867
Davis1楼主2024/8/13 17:34
#include<bits/stdc++.h>
using namespace std;
long long n,a[100001],s,sum[100001],ans;
int t[200001],nt[200001],h[200001],ssum;
void add(int x,int y){
	t[++ssum]=y;
	nt[ssum]=h[x];
	h[x]=ssum;
	return;
}
void dfs(int u,int fa){
	sum[u]=a[u];
	for(int i=h[u];~i;i=nt[i]){
		int v=t[i];
		if(v!=fa){
			dfs(v,u);
			sum[u]+=sum[v];
		}		
	}
	if(!sum[u]) ans++;
}
int main(){
	cin>>n;
	memset(h,-1,sizeof h);
	for(int i=1;i<=n;i++){
		cin>>a[i];	
		if(a[i]) s=i;
	}
	for(int i=1,x,y;i<n;i++){
		cin>>x>>y;
		add(x,y);
		add(y,x);	
	}
	dfs(s,0);
	cout<<n-sum[s]-ans;
	return 0;
} 

代码求调谢谢!!!

2024/8/13 17:34
加载中...