提出 #25037741
ソースコード 拡げる
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#define ld long double
#define ull unsigned long long
#define ll long long
#define pb push_back
#define ppb pop_back
#define eb emplace_back
#define pii pair<int, int>
#define pll pair<ll, ll>
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define fast_io cout.tie(0), cin.tie(0), ios_base::sync_with_stdio(0)
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("O3")
using namespace std;
//using namespace __gnu_pbds;
//typedef tree<ll, null_type, less_equal<>, rb_tree_tag,
// tree_order_statistics_node_update> ordered_set;
ld eps = (ld) 1 / 1e6;
ll inf_ll = 1e18 + 100, mod1 = 1e9 + 7, mod2 = 998244353;
ll mersen_mod = 2305843009213693951;
ll sqr(ll a) { return a * a; }
ll qb(ll a) { return a * a * a; }
ll gcd(ll a, ll b) { return !a ? b : gcd(b % a, a); }
ll add(ll a, ll b, ll mod) {
a += b;
if (a >= mod) a -= mod;
return a;
}
ll sub(ll a, ll b, ll mod) {
a -= b;
if (a < 0) a += mod;
return a;
}
ll binpow(ll a, ll b, ll mod) {
return b ? (b % 2 ? (a * (sqr(binpow(a, b / 2, mod)) % mod)) % mod :
sqr(binpow(a, b / 2, mod)) % mod) : 1;
}
ll binmult(ll a, ll b, ll mod) {
return b ? (b % 2 ? (2 * binmult(a, b / 2, mod) + a) % mod :
(2 * binmult(a, b / 2, mod)) % mod) : 0;
}
/// Code here
vector<ll> gr[100001];
ll ans, mn[100001];
struct edg { ll x, y, z; };
vector<edg> vc;
unordered_map<ll, vector<ll>> dsu;
int main() {
fast_io;
ll n, i, x, y, z;
cin >> n;
for (i = 1; i <= n; i++) dsu[i] = {i}, mn[i] = i;
for (i = 1; i < n; i++) {
cin >> x >> y >> z;
vc.pb({x, y, z});
gr[x].pb(y), gr[y].pb(x);
}
sort(all(vc), [](edg a, edg b) { return a.z < b.z; });
for (auto f : vc) {
x = mn[f.x];
y = mn[f.y];
z = f.z;
if (x == y) continue;
if (dsu[x].size() < dsu[y].size()) swap(x, y);
ans += dsu[x].size() * dsu[y].size() * z;
for (auto g : dsu[y]) {
dsu[x].pb(g);
mn[g] = x;
}
dsu.erase(y);
}
cout << ans;
//cerr << '\n' << "Time execute: " << clock() / (double)CLOCKS_PER_SEC << " sec" << '\n';
return 0;
}
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
400 / 400 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
example_00.txt, example_01.txt |
| All |
example_00.txt, example_01.txt, line.txt, linelike_00.txt, linelike_01.txt, linelike_02.txt, rand_00.txt, rand_01.txt, rand_02.txt, rand_03.txt, rand_04.txt, rand_05.txt, rand_06.txt, rand_07.txt, rand_08.txt, rand_09.txt, star.txt, starlike_00.txt, starlike_01.txt, starlike_02.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| example_00.txt |
AC |
12 ms |
5812 KiB |
| example_01.txt |
AC |
8 ms |
5968 KiB |
| line.txt |
AC |
161 ms |
21424 KiB |
| linelike_00.txt |
AC |
163 ms |
22656 KiB |
| linelike_01.txt |
AC |
161 ms |
22772 KiB |
| linelike_02.txt |
AC |
158 ms |
22072 KiB |
| rand_00.txt |
AC |
152 ms |
23396 KiB |
| rand_01.txt |
AC |
158 ms |
23400 KiB |
| rand_02.txt |
AC |
49 ms |
11584 KiB |
| rand_03.txt |
AC |
106 ms |
18340 KiB |
| rand_04.txt |
AC |
83 ms |
15876 KiB |
| rand_05.txt |
AC |
16 ms |
7120 KiB |
| rand_06.txt |
AC |
103 ms |
18368 KiB |
| rand_07.txt |
AC |
82 ms |
15628 KiB |
| rand_08.txt |
AC |
11 ms |
6676 KiB |
| rand_09.txt |
AC |
64 ms |
13060 KiB |
| star.txt |
AC |
136 ms |
23300 KiB |
| starlike_00.txt |
AC |
142 ms |
23308 KiB |
| starlike_01.txt |
AC |
143 ms |
23356 KiB |
| starlike_02.txt |
AC |
142 ms |
23844 KiB |