5650 2023. 08. 31 22:54:13 TomaSajt Útadó cpp17 Elfogadva 50/50 61ms 25624 KiB
#include <bits/stdc++.h>
using namespace std;
const int mod = 32609;

vector<vector<int>> g;
vector<int> par, sub_size;

void dfs(int u) {
  sub_size[u] = 1;
  for (int v : g[u]) {
    if (v == par[u]) continue;
    par[v] = u;
    dfs(v);
    sub_size[u] += sub_size[v];
  }
}

int main() {
  cin.tie(0), ios::sync_with_stdio(0);

  int n;
  cin >> n;

  g.resize(n + 1);
  par.resize(n + 1);
  sub_size.resize(n + 1);

  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  dfs(1);

  vector<array<int, 3>> edges;
  for (int i = 2; i <= n; i++) {
    int ss = sub_size[i];
    edges.push_back({ss * (n - ss) * 2, i, par[i]});
  }
  sort(edges.begin(), edges.end());

  vector<int> costs(n - 1);
  for (int& c : costs) cin >> c;
  sort(costs.begin(), costs.end());

  int res = 0;
  for (int i = 0; i < n - 1; i++) {
    res += (edges[i][0] % mod) * (costs[i] % mod);
    res %= mod;
  }
  cout << res << '\n';
  for (int i = 0; i < n - 1; i++) {
    cout << edges[i][1] << ' ' << edges[i][2] << ' ' << costs[i] << '\n';
  }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1828 KiB
2 Elfogadva 0/0 25ms 6024 KiB
3 Elfogadva 2/2 3ms 2744 KiB
4 Elfogadva 2/2 3ms 2956 KiB
5 Elfogadva 2/2 3ms 3176 KiB
6 Elfogadva 2/2 3ms 3392 KiB
7 Elfogadva 2/2 3ms 3600 KiB
8 Elfogadva 8/8 59ms 20492 KiB
9 Elfogadva 2/2 3ms 5088 KiB
10 Elfogadva 2/2 4ms 5180 KiB
11 Elfogadva 2/2 3ms 5212 KiB
12 Elfogadva 2/2 3ms 5248 KiB
13 Elfogadva 2/2 4ms 5252 KiB
14 Elfogadva 2/2 57ms 14344 KiB
15 Elfogadva 2/2 59ms 15376 KiB
16 Elfogadva 2/2 61ms 16648 KiB
17 Elfogadva 2/2 57ms 17704 KiB
18 Elfogadva 2/2 59ms 18876 KiB
19 Elfogadva 2/2 61ms 20012 KiB
20 Elfogadva 2/2 61ms 20952 KiB
21 Elfogadva 2/2 61ms 21992 KiB
22 Elfogadva 2/2 59ms 23184 KiB
23 Elfogadva 2/2 61ms 24456 KiB
24 Elfogadva 2/2 59ms 25624 KiB