求助WAon#2
  • 板块P1453 城市环路
  • 楼主hmya
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/1/19 15:39
  • 上次更新2023/10/28 11:57:04
查看原帖
求助WAon#2
264490
hmya楼主2022/1/19 15:39
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
double k;
int a[100005];
int father[100005];
vector<int> ljb[100005];
int dp[100005][2];
bool flag;
int r[100005];
int find(int x){
	if(father[x]==x){
		return x;
	}
	return father[x]=find(father[x]);
}
void unionn(int x,int y){
	int fx=find(x);
	int fy=find(y);
	if(fx==fy){
		flag=true;
		return;
	}
	father[fx]=fy;
	return;
}
void dfs(int i,int fa){
	dp[i][0]=0;
	dp[i][1]=a[i];
	for(int j=0;j<ljb[i].size();j++){
		int v=ljb[i][j];
		if(v==fa){
			continue;
		}
		dfs(v,i);
		dp[i][1]+=dp[v][0];
		dp[i][0]+=max(dp[v][0],dp[v][1]);
	}
	return;
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		father[i]=i;
	}
	for(int i=1;i<=n;i++){
		flag=false;
		int x,y;
		scanf("%lld%lld",&x,&y);
		x++;y++;
		unionn(x,y);
		if(flag){
//			puts("");
			continue;
		}
		ljb[x].push_back(y);
		ljb[y].push_back(x);
//		r[x]++;r[y]++;
	}
	scanf("%lf",&k);
	dfs(1,0);
	printf("%0.1lf",k*(max(dp[1][0],dp[1][1])));
 	return 0;
}

感觉是小数最后一位被卡了一下/kk

2022/1/19 15:39
加载中...