답안 #676154

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
676154 2022-12-29T14:58:48 Z vovamr Paths (RMI21_paths) C++17
36 / 100
600 ms 796 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define fi first
#define se second
#define ll long long
#define ld long double
#define sz(x) ((int)(x).size())
#define all(x) 	(x).begin(), (x).end()
#define pb push_back
#define mpp make_pair
#define ve vector
using namespace std;
using namespace __gnu_pbds;
template<class T> using oset = tree<T,null_type,less<T>,rb_tree_tag,tree_order_statistics_node_update>;
const ll inf = 1e18; const int iinf = 1e9;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
template <typename T> inline bool chmin(T& a, T b) { return (a > b ? a = b, 1 : 0); }
template <typename T> inline bool chmax(T& a, T b) { return (a < b ? a = b, 1 : 0); }

const int N = 2000;
const int lg = 11;

int n, k;
ve<pii> gr[N];

int up[N][lg];

ll d[N];
ll mx[N], act[N];

inline void dfs(int v, int p) {
	if (v == p) d[v] = 0;

	up[v][0] = p;
	for (int i = 1; i < lg; ++i) up[v][i] = up[up[v][i - 1]][i - 1];

	mx[v] = v;
	for (auto &[to, w] : gr[v]) {
		if (to == p) continue;
		d[to] = d[v] + w;
		dfs(to, v);
		if (d[mx[to]] > d[mx[v]]) mx[v] = mx[to];
	}
}
inline void dfs1(int v, int p) {
	if (v != p && sz(gr[v]) == 1) {
		int u = v;
		for (int i = lg - 1; ~i; --i) {
			if (mx[up[u][i]] == v) {
				u = up[u][i];
			}
		}
		act[v] = d[v] - d[up[u][0]];
	}
	for (auto &[to, w] : gr[v]) {
		if (to == p) continue;
		dfs1(to, v);
	}
}

inline void solve() {
	cin >> n >> k;
	for (int i = 1; i < n; ++i) {
		int v, u, c;
		cin >> v >> u >> c, --v, --u;
		gr[v].pb({u, c}), gr[u].pb({v, c});
	}

	for (int i = 0; i < n; ++i) {

		multiset<ll> st;

		dfs(i, i);
		dfs1(i, i);

		for (int v = 0; v < n; ++v) {
			if (sz(gr[v]) == 1 && v != i) {
				st.insert(act[v]);
			}
		}

		ll sum = 0, c = 0;
		while (c < k) {
			sum += *st.rbegin();
			st.erase(--st.end());
			++c;
		}
		cout << sum << '\n';
	}
}

signed main() {
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
	int q = 1; // cin >> q;
	while (q--) solve();
	cerr << fixed << setprecision(3) << "Time execution: " << (double)clock() / CLOCKS_PER_SEC << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 5 ms 340 KB Output is correct
4 Correct 4 ms 340 KB Output is correct
5 Correct 5 ms 340 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
7 Correct 4 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 5 ms 340 KB Output is correct
4 Correct 4 ms 340 KB Output is correct
5 Correct 5 ms 340 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
7 Correct 4 ms 340 KB Output is correct
8 Correct 136 ms 512 KB Output is correct
9 Correct 104 ms 636 KB Output is correct
10 Correct 79 ms 488 KB Output is correct
11 Correct 141 ms 504 KB Output is correct
12 Correct 93 ms 484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 5 ms 340 KB Output is correct
4 Correct 4 ms 340 KB Output is correct
5 Correct 5 ms 340 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
7 Correct 4 ms 340 KB Output is correct
8 Correct 136 ms 512 KB Output is correct
9 Correct 104 ms 636 KB Output is correct
10 Correct 79 ms 488 KB Output is correct
11 Correct 141 ms 504 KB Output is correct
12 Correct 93 ms 484 KB Output is correct
13 Correct 585 ms 628 KB Output is correct
14 Correct 469 ms 656 KB Output is correct
15 Correct 294 ms 628 KB Output is correct
16 Correct 581 ms 684 KB Output is correct
17 Correct 401 ms 628 KB Output is correct
18 Correct 294 ms 612 KB Output is correct
19 Execution timed out 646 ms 796 KB Time limit exceeded
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1 ms 468 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 5 ms 340 KB Output is correct
4 Correct 4 ms 340 KB Output is correct
5 Correct 5 ms 340 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
7 Correct 4 ms 340 KB Output is correct
8 Correct 136 ms 512 KB Output is correct
9 Correct 104 ms 636 KB Output is correct
10 Correct 79 ms 488 KB Output is correct
11 Correct 141 ms 504 KB Output is correct
12 Correct 93 ms 484 KB Output is correct
13 Correct 585 ms 628 KB Output is correct
14 Correct 469 ms 656 KB Output is correct
15 Correct 294 ms 628 KB Output is correct
16 Correct 581 ms 684 KB Output is correct
17 Correct 401 ms 628 KB Output is correct
18 Correct 294 ms 612 KB Output is correct
19 Execution timed out 646 ms 796 KB Time limit exceeded
20 Halted 0 ms 0 KB -