254152026-02-19 21:53:01CzDaniÚtadócpp17Accepted 50/50101ms9644 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

int n;
vector<vector<int>> adj;
vector<pair<int, pair<int, int>>> elek;

int dfs(int v, int p) {
    int db = 1;
    for (int u : adj[v]) {
        if (u==p)continue;
        db += dfs(u, v);
    }
    if (db<n)elek.push_back({db*(n-db), {v, p}});
    return db;
}

signed main() {
    cin >> n;
    adj.resize(n+1);
    for (int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
    dfs(1, 0);
    vector<int> v(n-1);
    for (int i = 0; i < n-1; i++) {
        cin >> v[i];
    }
    sort(v.begin(),v.end());
    sort(elek.begin(),elek.end());
    int ans = 0;
    for (int i = 0; i < n-1; i++) {
        ans += (elek[i].first*v[i])%32609;
    }
    cout << (ans*2)%32609 << endl;
    for (int i = 0; i < n-1; i++) {
        cout << elek[i].second.first << ' ' << elek[i].second.second << ' ' << v[i] << '\n';
    }
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/039ms2628 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted8/897ms9644 KiB
9Accepted2/23ms316 KiB
10Accepted2/22ms316 KiB
11Accepted2/23ms316 KiB
12Accepted2/23ms316 KiB
13Accepted2/22ms360 KiB
14Accepted2/297ms6312 KiB
15Accepted2/297ms6312 KiB
16Accepted2/2101ms6312 KiB
17Accepted2/2100ms6272 KiB
18Accepted2/298ms6060 KiB
19Accepted2/2100ms6056 KiB
20Accepted2/298ms6080 KiB
21Accepted2/298ms6072 KiB
22Accepted2/298ms6056 KiB
23Accepted2/2101ms5964 KiB
24Accepted2/2101ms6060 KiB