From 785c9dcea8a53056d9c8cd8fafeead1a65857d3a Mon Sep 17 00:00:00 2001 From: hanyixuanten Date: Tue, 18 Aug 2026 11:39:05 +0800 Subject: [PATCH] modified: 30.cpp --- 30.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/30.cpp b/30.cpp index 6216bed..82b6eb2 100644 --- a/30.cpp +++ b/30.cpp @@ -1 +1,46 @@ -// 115 \ No newline at end of file +// 115 not finished +#include +using namespace std; +int n; +int a[1005]; +int fa[1005]; +int dt[1005]; +int root; +vector chi[1005]; +bool ran[1005]; +int ans, T; +void dfs(int now) // 染色到dt[now] +{ + if (dt[now] == root) + { + ran[now] = 1, ans += (T++) * a[dt[now]]; + return; + } + if (!ran[fa[dt[now]]]) + dfs(fa[dt[now]]); + ran[now] = 1, ans += (T++) * a[dt[now]]; +} +int main() +{ + scanf("%d", &n); + for (int i = 1; i <= n; ++i) + scanf("%d", &a[i]), dt[i] = i; + sort(dt + 1, dt + n + 1, [](int x, int y) + { return a[x] < a[y]; }); + for (int u, v, i = 1; i < n; ++i) + scanf("%d%d", &u, &v), + fa[v] = u, chi[u].push_back(v); + for (int i = 1; i <= n; ++i) + { + if (fa[i] == i) + { + root = i; + break; + } + } + for (int i = 1; i <= n; ++i) + { + dfs(i); + } + printf("%d\n", ans); +} \ No newline at end of file