4wa6mle求助
查看原帖
4wa6mle求助
573334
yzkadbq_qwq楼主2023/7/10 10:58
#include<bits/stdc++.h>
#define int long long
using namespace std;
int fa[100001],n,a[100001],s,t;
double f[100001][2];
struct edge{
	int v,next;
} e[200002];
int h[100001],cnt=0;
void addedge(int u,int v){
	e[++cnt].v=v;
	e[cnt].next=h[u];
	h[u]=cnt;
	return;
}
int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
int dfs(int u,int fa){
	f[u][1]=a[u];
	f[u][0]=0;
	for(int i=h[u];i;i=e[i].next){
		int v=e[i].v;
		if(v=fa) continue;
		dfs(v,u);
		f[u][0]+=max(f[v][1],f[v][0]);
		f[u][1]+=f[v][0];
	}
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		fa[i]=i;
	}
	for(int i=1;i<=n;i++){
		int u,v;
		cin>>u>>v;
		addedge(u,v);
		addedge(v,u);
		if(find(u)==find(v)){
			s=u,t=v;
			continue;
		}
		fa[find(u)]=find(v);
	}
	double k,ans=0;
	cin>>k;
	dfs(s,0);
	ans=f[s][0];
	dfs(t,0);
	ans=max(ans,double(f[t][0]));
	cout<<ans*k;
	return 0;
}
2023/7/10 10:58
加载中...