求条
  • 板块P1453 城市环路
  • 楼主wmoia
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/6/22 14:16
  • 上次更新2025/6/23 11:50:37
查看原帖
求条
1149038
wmoia楼主2025/6/22 14:16

sub2全wa求调,思路是题解第一篇

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5; 
int n, S, T;
double k;
double w[N], dp[N][2];
vector<int> g[N];
int fa[N];
int find(int x){
	if(fa[x] != x) fa[x] = find(fa[x]);
	return fa[x];
}
void dfs(int u, int fa, bool flag){
	dp[u][1] = w[u];
	dp[u][0] = 0;	
	for(int v : g[u]){
		if(v == fa) continue;
		dfs(v, u, flag);
		dp[u][0] += max(dp[v][0], dp[v][1]);
		dp[u][1] += dp[v][0];
	}
}
signed main(){
	cin >> n;
	for(int i = 0; i < n; i++) cin >> w[i], fa[i] = i;
	for(int i = 0, u, v; i < n; i++){
		cin >> u >> v;
		if(find(u) == find(v)){
			S = u;
			T = v;
			continue;
		}
		g[u].push_back(v);
		g[v].push_back(u);
		fa[find(v)] = find(u);
	}
	cin >> k;
	dfs(S, -1);
	dfs(T, -1);
	double ans = max(dp[S][0], dp[T][0]);
	printf("%.1lf", ans * k);
	return 0;
}
2025/6/22 14:16
加载中...