151662025-02-14 12:11:55RRoliÚtadócpp17Accepted 50/50100ms7736 KiB
#include <bits/stdc++.h>
using namespace std;

long long n, MOD = 32609;
vector<long long> gyersz;
vector<vector<long long>> fiu;
vector<pair<long long, pair<long long, long long>>> el;

long long gyerek(long long k) {
    gyersz[k] += fiu[k].size();
    for(auto i : fiu[k]) gyersz[k] += gyerek(i);
    return gyersz[k];
}

int main() {
    cin >> n;
    fiu.resize(n+1, vector<long long>(0)); gyersz.resize(n+1, 0); el.resize(n-1);
    for(long long i = 0; i < n-1; i++) {
        long long a, b;
        cin >> a >> b;
        fiu[a].push_back(b);
        el[i].second.first = a;
        el[i].second.second = b;
    }

    gyerek(1);
    for(long long i = 0; i < n-1; i++) {
        el[i].first = 2*(1+gyersz[el[i].second.second])*(n-(1+gyersz[el[i].second.second]));
    }
    sort(el.begin(), el.end());

    vector<long long> hosszak(n-1);
    for(long long i = 0; i < n-1; i++) {
        cin >> hosszak[i];
    }
    sort(hosszak.begin(), hosszak.end());

    long long s = 0;
    for(long long i = 0; i < n-1; i++) {
        s = (s + (hosszak[i]%MOD)*(el[i].first%MOD) % MOD) % MOD;
    }

    cout << s << '\n';
    for(long long i = 0; i < n-1; i++) {
        cout << el[i].second.first << ' ' << el[i].second.second << ' ' << hosszak[i] << '\n';
    }

	return 0;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/035ms2356 KiB
3Accepted2/21ms316 KiB
4Accepted2/21ms508 KiB
5Accepted2/21ms608 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted8/890ms7736 KiB
9Accepted2/22ms316 KiB
10Accepted2/22ms316 KiB
11Accepted2/22ms316 KiB
12Accepted2/22ms316 KiB
13Accepted2/22ms472 KiB
14Accepted2/292ms5176 KiB
15Accepted2/292ms5380 KiB
16Accepted2/289ms5428 KiB
17Accepted2/293ms5428 KiB
18Accepted2/290ms5428 KiB
19Accepted2/296ms5428 KiB
20Accepted2/293ms5428 KiB
21Accepted2/294ms5428 KiB
22Accepted2/293ms5456 KiB
23Accepted2/2100ms5476 KiB
24Accepted2/292ms5428 KiB