답안 #40369

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
40369 2018-01-31T12:23:37 Z SpaimaCarpatilor Fireworks (APIO16_fireworks) C++14
0 / 100
414 ms 459692 KB
#include<bits/stdc++.h>

using namespace std;

int N, M, t[309], L[309];
long long maxH, dp[309][309*309], depth[309];
const long long INF = 1LL << 60;
vector < int > v[309];

int modul (int x)
{
    if (x < 0) return -x;
    return x;
}

int main ()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);

scanf ("%d %d", &N, &M);
for (int i=2; i<=N + M; i++)
    scanf ("%d %d", &t[i], &L[i]), v[t[i]].push_back (i), depth[i] = depth[t[i]] + L[i], maxH = max (maxH, depth[i]);
for (int nod = N + M; nod > N; nod --)
    for (int i=0; i<=maxH; i++)
        dp[nod][i] = modul (i - L[nod]);
for (int nod = N; nod>=1; nod--)
{
    ///adding
    for (auto son : v[nod])
        for (int i=0; i<=maxH; i++)
            dp[nod][i] += dp[son][i];
    ///shifting
    for (int i=maxH; i>=0; i--)
        if (i >= L[nod]) dp[nod][i] = dp[nod][i - L[nod]];
        else dp[nod][i] = INF;
    ///refreshing
    long long mini = INF;
    for (int i=0; i<=maxH; i++)
    {
        dp[nod][i] = min (mini + i, dp[nod][i]);
        if (dp[nod][i] - i < mini)
            mini = dp[nod][i] - i;
    }
    mini = INF;
    for (int i=maxH; i>=0; i--)
    {
        dp[nod][i] = min (mini - i, dp[nod][i]);
        if (dp[nod][i] + i < mini)
            mini = dp[nod][i] + i;
    }
}
long long ans = INF;
for (int i=0; i<=maxH; i++)
    if (dp[1][i] < ans)
        ans = dp[1][i];
printf ("%lld\n", ans);
return 0;
}

Compilation message

fireworks.cpp: In function 'int main()':
fireworks.cpp:21:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 scanf ("%d %d", &N, &M);
                        ^
fireworks.cpp:23:117: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf ("%d %d", &t[i], &L[i]), v[t[i]].push_back (i), depth[i] = depth[t[i]] + L[i], maxH = max (maxH, depth[i]);
                                                                                                                     ^
# 결과 실행 시간 메모리 Grader output
1 Runtime error 414 ms 459692 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 459692 KB Output is correct
2 Correct 2 ms 459692 KB Output is correct
3 Incorrect 2 ms 459692 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 414 ms 459692 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 414 ms 459692 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -