154612025-02-19 17:55:06999Útadócpp17Elfogadva 50/50167ms8868 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int inf=1e9;

int power(int a,int b){
    if(b==0)return 1;
    return power(a,b-1)*a;
}
int n;
vector<int> siz;

bool hasonlo(pair<int,int> a, pair<int,int> b){
    return siz[a.second]*(n-siz[a.second])>siz[b.second]*(n-siz[b.second]);
}

void dfs(vector<vector<int>>& v, int i){
    siz[i]=1;
    for(int j : v[i]){
        dfs(v,j);
        siz[i]+=siz[j];
    }
}

signed main() {
    cin>>n;
    vector<pair<int,int>> elek;
    vector<vector<int>> v(n);
    siz.resize(n);
    for(int i = 0;i<n-1;i++){
        int a,b;cin>>a>>b;
        a--;b--;
        elek.push_back({a,b});
        v[a].push_back(b);
    }
    vector<int> arak(n-1);
    for(int i = 0;i<n-1;i++){
        cin>>arak[i];
    }
    sort(arak.rbegin(),arak.rend());
    dfs(v, 0);
    sort(elek.begin(),elek.end(),hasonlo);
    int ans=0;
    //for(int i = 0;i<n-1;i++)cerr<<elek[i].first<<' '<<elek[i].second<<endl;
    for(int i = 0;i<n-1;i++){
        int temp=siz[elek[i].second];
        ans+=((temp*(n-temp)%32609)*(arak[i]*2)%32609);
        ans%=32609;
    }cout<<ans<<endl;
    for(int i = 0;i<n-1;i++){
        cout<<elek[i].first+1<<' '<<elek[i].second+1<<' '<<arak[i]<<endl;
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/061ms2220 KiB
3Elfogadva2/21ms500 KiB
4Elfogadva2/21ms316 KiB
5Elfogadva2/21ms316 KiB
6Elfogadva2/21ms316 KiB
7Elfogadva2/21ms316 KiB
8Elfogadva8/8160ms8868 KiB
9Elfogadva2/24ms596 KiB
10Elfogadva2/24ms316 KiB
11Elfogadva2/24ms316 KiB
12Elfogadva2/24ms316 KiB
13Elfogadva2/24ms500 KiB
14Elfogadva2/2166ms5032 KiB
15Elfogadva2/2162ms4900 KiB
16Elfogadva2/2148ms5060 KiB
17Elfogadva2/2150ms5032 KiB
18Elfogadva2/2155ms5032 KiB
19Elfogadva2/2157ms5036 KiB
20Elfogadva2/2156ms5040 KiB
21Elfogadva2/2152ms5220 KiB
22Elfogadva2/2167ms5288 KiB
23Elfogadva2/2166ms5176 KiB
24Elfogadva2/2152ms5288 KiB