Sub2(Hack)WA 干净了求条。(玄关)
  • 板块P1453 城市环路
  • 楼主Walrus
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/4/13 09:11
  • 上次更新2024/4/13 11:14:44
查看原帖
Sub2(Hack)WA 干净了求条。(玄关)
908424
Walrus楼主2024/4/13 09:11

它为啥能 Hack 这种 DP?

#include <bits/stdc++.h>
#define rep(i, j, k) for(int i = j; i <= k; ++i)
#define pb push_back
using namespace std;

const int N = 1e5 + 5;

double dp[N][2], k;
int n, m, u, v, p[N], s, t, ans, f;
vector<int> e[N];

int fa[N];
int get(int x) {
	return x == fa[x] ? x : fa[x] = get(fa[x]);
}

void merge(int x, int y) {
	fa[get(x)] = get(y);
}

void dfs(int u, int fa) {
	dp[u][0] = 0, dp[u][1] = p[u];
	for(auto v : e[u]) {
		if(v == fa)
			continue;
		dfs(v, u);
		dp[u][0] += max(dp[v][0], dp[v][1]);
		dp[u][1] += dp[v][0];
	}
}


signed main() {
//	ios::sync_with_stdio(0);
//	cin.tie(nullptr), cout.tie(nullptr);
	
	cin >> n;
	rep(i, 1, n) cin >> p[i], fa[i] = i;
	rep(i, 1, n) {
		cin >> u >> v, ++u, ++v;
		if(get(u) == get(v) && !s) {
			s = u, t = v;
			continue;
		}
		merge(u, v), e[u].pb(v), e[v].pb(u);
	}
		
	cin >> k;
	
	
	
	dfs(s, 0), dfs(t, 0);
	
	printf("%.1lf", max(dp[s][0], dp[t][0]) * k);
}
2024/4/13 09:11
加载中...