大佬求带
查看原帖
大佬求带
1071242
wuzhaozhong123楼主2025/6/25 10:01
#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){
		//cout<<i<<" "<<l<<endl;
		ans+=l;
		ans--;
		l=0;
	}
	for(auto x:g[i]){
		//cout<<i<<" "<<x<<" "<<l<<endl; 
		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);
	}
	//cout<<fi<<" ";
	dfs(fi,-1,0);
	cout<<ans+1;
	return 0;
} 

思路是枚举两个黑点之间的距离(在dfs里)。 大佬求带,十个样例点没过,求改进。

2025/6/25 10:01
加载中...