249492026-02-17 07:14:21szjÚtadócpp17Accepted 50/50120ms4404 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;
struct cuc
{
    ll el=0, cur, su;
};
bool f(cuc a, cuc b)
{
    return a.su>b.su;
}
int main()
{
    //ifstream cin("f.txt");
    ios::sync_with_stdio(0);
    cin.tie(0);
    ll n, a, b, i, cica=0;
    cin >> n;
    ll apa[n+1]={0};
    cuc sum[n+1];
    ll alul[n+1]={};
    ll num[n+1]={};
    for(i=1; i<n; i++)
    {
        cin >> a >> b;
        apa[b]=a;
        num[a]++;
        sum[b].el=a;
        sum[b].cur=b;
    }
    queue<ll>q;
    for(i=1; i<=n; i++)
    {
        alul[i]=1;
        if(!num[i])q.push(i);
    }
    while(!q.empty() && q.front()!=1)
    {
        a=q.front();
        q.pop();
        num[apa[a]]--;
        sum[a].su=2*alul[a]*(n-alul[a]);
        alul[apa[a]]+=alul[a];
        if(num[apa[a]]==0)q.push(apa[a]);
    }
    sort(sum+2, sum+n+1, f);
    ll values[n];
    for(i=1; i<n; i++)cin >> values[i];
    sort(values+1, values+n, greater<ll>());
    for(i=1; i<n; i++)cica=(cica+values[i]*sum[i+1].su)%32609;
    cout << cica << endl;
    for(i=2; i<=n; i++)cout << sum[i].el << " " << sum[i].cur << " " << values[i-1] << endl;
    return 0;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/043ms1840 KiB
3Accepted2/21ms508 KiB
4Accepted2/21ms316 KiB
5Accepted2/21ms316 KiB
6Accepted2/21ms316 KiB
7Accepted2/21ms316 KiB
8Accepted8/8112ms4052 KiB
9Accepted2/23ms316 KiB
10Accepted2/23ms316 KiB
11Accepted2/23ms316 KiB
12Accepted2/23ms316 KiB
13Accepted2/23ms508 KiB
14Accepted2/2120ms4404 KiB
15Accepted2/2112ms4324 KiB
16Accepted2/2104ms4404 KiB
17Accepted2/2104ms4404 KiB
18Accepted2/2107ms4404 KiB
19Accepted2/2104ms4148 KiB
20Accepted2/2104ms4308 KiB
21Accepted2/2104ms4148 KiB
22Accepted2/2103ms4160 KiB
23Accepted2/2108ms4148 KiB
24Accepted2/2108ms4148 KiB