923 2022. 01. 28 13:17:18 Valaki2 Útadó cpp14 Elfogadva 50/50 86ms 26352 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pb push_back
#define mp make_pair
#define fi first
#define se second

const int mod = 32609;

// tulkomplikalt adatszerkezet :( azt hittem kell... :)

struct edge {
    int to, subtree_size;
    edge() : to(0), subtree_size(0) {}
    edge(int to_, int subtree_size_) : to(to_), subtree_size(subtree_size_) {}
};

struct node {
    vector<edge> neighbours;
    node() {}
};

struct road {
    int product, a, b;
    bool operator < (const road & other) const {
        return product < other.product;
    }
    road(int product_, int a_, int b_) : product(product_), a(a_), b(b_) {}
};

int n;
vector<node> graph;
vector<int> weights;
vector<road> roads;

int dfs(int cur, int par) {
    int cur_subtree_size = 1;
    for(edge &nei : graph[cur].neighbours) {
        if(nei.to == par) continue;
        nei.subtree_size = dfs(nei.to, cur);
        cur_subtree_size += nei.subtree_size;
        roads.pb(road((n - nei.subtree_size) * nei.subtree_size, cur, nei.to));
    }
    return cur_subtree_size;
}

void solve() {
    cin >> n;
    weights.assign(n - 1, 0);
    graph.assign(1 + n, node());
    for(int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        graph[a].neighbours.pb(edge(b, 0));
        graph[b].neighbours.pb(edge(a, 0));
    }
    for(int &x : weights) cin >> x;
    sort(weights.begin(), weights.end());
    dfs(1, 0);
    sort(roads.begin(), roads.end());
    int answer = 0;
    for(int i = 0; i < n - 1; i++) {
        answer += roads[i].product * weights[i];
        answer %= mod;
    }
    answer = (answer * 2) % mod;
    cout << answer << "\n";
    for(int i = 0; i < n - 1; i++) {
        cout << roads[i].a << " " << roads[i].b << " " << weights[i] << "\n";
    }
}

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 2ms 1752 KiB
2 Elfogadva 0/0 21ms 7524 KiB
3 Elfogadva 2/2 1ms 2288 KiB
4 Elfogadva 2/2 2ms 2288 KiB
5 Elfogadva 2/2 2ms 2292 KiB
6 Elfogadva 2/2 2ms 2304 KiB
7 Elfogadva 2/2 1ms 2304 KiB
8 Elfogadva 8/8 52ms 23688 KiB
9 Elfogadva 2/2 2ms 3620 KiB
10 Elfogadva 2/2 3ms 3636 KiB
11 Elfogadva 2/2 2ms 3652 KiB
12 Elfogadva 2/2 2ms 3676 KiB
13 Elfogadva 2/2 3ms 3696 KiB
14 Elfogadva 2/2 61ms 16672 KiB
15 Elfogadva 2/2 57ms 17688 KiB
16 Elfogadva 2/2 57ms 18676 KiB
17 Elfogadva 2/2 78ms 19764 KiB
18 Elfogadva 2/2 57ms 20788 KiB
19 Elfogadva 2/2 57ms 21820 KiB
20 Elfogadva 2/2 86ms 22276 KiB
21 Elfogadva 2/2 61ms 23208 KiB
22 Elfogadva 2/2 65ms 24260 KiB
23 Elfogadva 2/2 59ms 25312 KiB
24 Elfogadva 2/2 68ms 26352 KiB