답안 #378454

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
378454 2021-03-16T20:37:14 Z rainboy Fireworks (APIO16_fireworks) C
0 / 100
1 ms 1016 KB
#include <stdio.h>
#include <string.h>

#define N	5000
#define INF	0x3f3f3f3f

int min(int a, int b) { return a < b ? a : b; }

int merge(int *dd1, int *ll1, int k1, int *dd2, int *ll2, int k2) {
	static int dd[N], ll[N];
	int k, h1, h2;

	k = 0, h1 = h2 = 0;
	while (h1 < k1 || h2 < k2) {
		int l = min(h1 < k1 ? ll1[h1] : INF, h2 < k2 ? ll2[h2] : INF);

		dd[k] = (h1 < k1 ? dd1[h1] : 1) + (h2 < k2 ? dd2[h2] : 1), ll[k] = l, k++;
		if (h1 < k1 && (ll1[h1] -= l) == 0)
			h1++;
		if (h2 < k2 && (ll2[h2] -= l) == 0)
			h2++;
	}
	while (k > 0 && dd[k - 1] >= 1)
		k--;
	memcpy(dd1, dd, k * sizeof *dd);
	memcpy(ll1, ll, k * sizeof *ll);
	return k;
}

int main() {
	static int pp[N], cc[N], dd[N][N], ll[N][N], kk[N];
	static long long dp[N];
	int n, m, n_, h, i;
	long long ans;

	scanf("%d%d", &n, &m), n_ = n + m;
	for (i = 1; i < n_; i++)
		scanf("%d%d", &pp[i], &cc[i]), pp[i]--;
	for (i = n_ - 1; i > 0; i--) {
		int p;

		dp[i] += cc[i];
		for (h = kk[i]; h > 0 && dd[i][h - 1] >= -1; h--)
			dd[i][h] = dd[i][h - 1], ll[i][h] = ll[i][h - 1];
		dd[i][h] = -1, ll[i][h] = cc[i], kk[i]++;
		p = pp[i];
		dp[p] += dp[i];
		if (kk[p] == 0)
			memcpy(dd[p], dd[i], kk[i] * sizeof *dd[i]), memcpy(ll[p], ll[i], kk[i] * sizeof *ll[i]), kk[p] = kk[i];
		else
			kk[p] = merge(dd[p], ll[p], kk[p], dd[i], ll[i], kk[i]);
	}
	ans = dp[0];
	for (h = 0; h < kk[0]; h++)
		ans += (long long) dd[i][h] * ll[i][h];
	printf("%lld\n", ans);
	return 0;
}

Compilation message

fireworks.c: In function 'main':
fireworks.c:36:2: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
   36 |  scanf("%d%d", &n, &m), n_ = n + m;
      |  ^~~~~~~~~~~~~~~~~~~~~
fireworks.c:38:3: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result [-Wunused-result]
   38 |   scanf("%d%d", &pp[i], &cc[i]), pp[i]--;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Incorrect 1 ms 1016 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 492 KB Output is correct
2 Incorrect 1 ms 620 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Incorrect 1 ms 1016 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Incorrect 1 ms 1016 KB Output isn't correct
4 Halted 0 ms 0 KB -