답안 #486537

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
486537 2021-11-11T23:04:32 Z Samboor Fireworks (APIO16_fireworks) C++17
26 / 100
1 ms 332 KB
// Grzegorz Ryn
// V LO Kraków

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
#define pb push_back
#define st first
#define nd second

const ll INF = 1'000'000'000;

int N, M;

vector<vector<int>> g;
vector<ll> cost;

vector<int> slope_ind;
vector<vector<ll>> slope;
vector<ll> initial_slope, final_slope, first_value;

void dfs(int v) {
	if(v > N) {
		slope[v].pb(cost[v]);
		slope[v].pb(cost[v]);
		initial_slope[v] = -1;
		final_slope[v] = 1;
		first_value[v] = cost[v];
		return;
	}
	
	for(int u:g[v]) {
		dfs(u);
		
		int V = slope_ind[v];
		int U = slope_ind[u];
		if(slope[V].size() < slope[U].size()) {
			swap(V, U);
			swap(slope_ind[v], slope_ind[u]);
		}
		for(int p : slope[U]) {
			slope[V].pb(p);
		}
		sort(slope[V].begin(), slope[V].end());
		
		first_value[v] += first_value[u];
		initial_slope[v] += initial_slope[u];
		final_slope[v] += final_slope[u];
	}
	
	int V = slope_ind[v], l, r;
	while(final_slope[v] >= 0) {
		assert(slope[V].size() > 0);
		if(final_slope[v] == 1) {
			r = slope[V].back();
		}
		else if(final_slope[v] == 0) {
			l = slope[V].back();
		}
		
		slope[V].pop_back();
		final_slope[v]--;
	}
	
	first_value[v] += cost[v];
	slope[V].pb(l + cost[v]);
	slope[V].pb(r + cost[v]);
	final_slope[v] = 1;
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin >> N >> M;
	
	g.resize(N+M+1);
	cost.resize(N+M+1, 0);
	
	slope.resize(N+M+1);
	slope_ind.resize(N+M+1);
	iota(slope_ind.begin(), slope_ind.end(), 0);
	initial_slope.resize(N+M+1, 0);
	final_slope.resize(N+M+1, 0);
	first_value.resize(N+M+1, 0);
	
	for(int i=2; i<=N+M; i++) {
		int p;
		cin >> p >> cost[i];
		g[p].pb(i);
	}

	dfs(1);
	
	int it = slope_ind[1];
	ll result = (ll)INF*INF, res = first_value[1], prv = 0;
	for(ll pos : slope[it]) {
		res += initial_slope[1] * (pos - prv);
		initial_slope[1]++;
		prv = pos;
		result = min(result, res);
		
		if(initial_slope[1] >= 0) {  
			break;
		}
	}
	
	cout << result << '\n';

	return 0;
}

Compilation message

fireworks.cpp: In function 'void dfs(int)':
fireworks.cpp:69:14: warning: 'r' may be used uninitialized in this function [-Wmaybe-uninitialized]
   69 |  slope[V].pb(r + cost[v]);
      |              ^
fireworks.cpp:68:14: warning: 'l' may be used uninitialized in this function [-Wmaybe-uninitialized]
   68 |  slope[V].pb(l + cost[v]);
      |              ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 312 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 308 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 204 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 0 ms 332 KB Output is correct
9 Correct 0 ms 312 KB Output is correct
10 Correct 1 ms 312 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 0 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 1 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 1 ms 332 KB Output is correct
19 Correct 0 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 312 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 0 ms 308 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 0 ms 204 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 0 ms 332 KB Output is correct
19 Correct 0 ms 312 KB Output is correct
20 Correct 1 ms 312 KB Output is correct
21 Correct 1 ms 332 KB Output is correct
22 Correct 0 ms 332 KB Output is correct
23 Correct 1 ms 332 KB Output is correct
24 Correct 1 ms 332 KB Output is correct
25 Correct 1 ms 332 KB Output is correct
26 Correct 1 ms 332 KB Output is correct
27 Correct 1 ms 332 KB Output is correct
28 Correct 1 ms 332 KB Output is correct
29 Correct 0 ms 332 KB Output is correct
30 Incorrect 1 ms 332 KB Output isn't correct
31 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 1 ms 312 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 1 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 0 ms 308 KB Output is correct
14 Correct 1 ms 204 KB Output is correct
15 Correct 1 ms 204 KB Output is correct
16 Correct 0 ms 204 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 0 ms 332 KB Output is correct
19 Correct 0 ms 312 KB Output is correct
20 Correct 1 ms 312 KB Output is correct
21 Correct 1 ms 332 KB Output is correct
22 Correct 0 ms 332 KB Output is correct
23 Correct 1 ms 332 KB Output is correct
24 Correct 1 ms 332 KB Output is correct
25 Correct 1 ms 332 KB Output is correct
26 Correct 1 ms 332 KB Output is correct
27 Correct 1 ms 332 KB Output is correct
28 Correct 1 ms 332 KB Output is correct
29 Correct 0 ms 332 KB Output is correct
30 Incorrect 1 ms 332 KB Output isn't correct
31 Halted 0 ms 0 KB -