154532025-02-19 17:15:14999Útadócpp17Wrong answer 3/50168ms8444 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> depth,siz;

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

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

signed main() {
    cin>>n;
    vector<pair<int,int>> elek;
    vector<vector<int>> v(n);
    depth.resize(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, 0);
    sort(elek.begin(),elek.end(),hasonlo);
    int ans=0;
    for(int i = 0;i<n-1;i++){
        int temp=siz[elek[i].second];
        ans+=(temp*(n-temp)*arak[i]*2)%32609;
    }cout<<ans<<endl;
    for(int i = 0;i<n-1;i++){
        cout<<elek[i].first+1<<' '<<elek[i].second+1<<' '<<arak[i]<<endl;
    }
}
SubtaskSumTestVerdictTimeMemory
base3/50
1Accepted0/01ms508 KiB
2Wrong answer0/061ms2476 KiB
3Partially correct1/21ms316 KiB
4Partially correct1/21ms316 KiB
5Wrong answer0/21ms316 KiB
6Wrong answer0/21ms316 KiB
7Wrong answer0/21ms316 KiB
8Wrong answer0/8150ms8444 KiB
9Partially correct1/24ms316 KiB
10Wrong answer0/24ms316 KiB
11Wrong answer0/24ms320 KiB
12Wrong answer0/24ms484 KiB
13Wrong answer0/23ms316 KiB
14Wrong answer0/2165ms5284 KiB
15Wrong answer0/2165ms5288 KiB
16Wrong answer0/2153ms5288 KiB
17Wrong answer0/2153ms5288 KiB
18Wrong answer0/2167ms5440 KiB
19Wrong answer0/2168ms5544 KiB
20Wrong answer0/2156ms5544 KiB
21Wrong answer0/2163ms5544 KiB
22Wrong answer0/2159ms5544 KiB
23Wrong answer0/2158ms5544 KiB
24Wrong answer0/2157ms5488 KiB