답안 #44713

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
44713 2018-04-05T11:43:45 Z bogdan10bos Chase (CEOI17_chase) C++14
50 / 100
447 ms 172536 KB
#include <bits/stdc++.h>

using namespace std;

//#define FILE_IO

typedef long long LL;

LL ans;
int N, K;
int v[100005];
LL vec[100005];
LL dpup[100005][105], dpdown[100005][105];
LL bstdown[105][2];
vector<int> edg[100005];

void DFS(int nod, int fth)
{
    for(auto nxt: edg[nod])
    {
        if(nxt == fth)  continue;
        DFS(nxt, nod);
    }

    for(int i = 0; i <= K; i++)
        bstdown[i][0] = bstdown[i][1] = 0LL;

    for(auto nxt: edg[nod])
    {
        if(nxt == fth)  continue;

        for(int i = 0; i <= K; i++)
        {
            if(i > 0)
            {
                dpup[nod][i] = max({ dpup[nod][i], dpup[nxt][i], dpup[nxt][i - 1] + vec[nod] - v[nxt] });
                dpdown[nod][i] = max({ dpdown[nod][i], dpdown[nxt][i], dpdown[nxt][i - 1] + vec[nod] - v[fth] });
                dpup[nod][i] = max(dpup[nod][i], dpup[nod][i - 1]), dpdown[nod][i] = max(dpdown[nod][i], dpdown[nod][i - 1]);
            }

            ans = max(ans, dpup[nod][i]);
            ans = max(ans, dpdown[nod][i]);

            if(dpdown[nxt][i] > bstdown[i][0])
            {
                bstdown[i][1] = bstdown[i][0];
                bstdown[i][0] = dpdown[nxt][i];
            }
            else if(dpdown[nxt][i] > bstdown[i][1])
                bstdown[i][1] = dpdown[nxt][i];
        }
    }

    for(auto nxt: edg[nod])
    {
        if(nxt == fth)  continue;

        for(int i = 0; i <= K; i++)
        {
            LL nxtbst = bstdown[i][0];
            if(bstdown[i][0] == dpdown[nxt][i]) nxtbst = bstdown[i][1];

            ans = max(ans, dpup[nxt][K - i] + nxtbst);
            if(K - i - 1 >= 0)  ans = max(ans, nxtbst + dpup[nxt][K - i - 1] + vec[nod] - v[nxt]);
        }
    }

    dpup[nod][1] = max(dpup[nod][1], vec[nod]);
}

int main()
{
    #ifdef FILE_IO
    freopen("1.in", "r", stdin);
    freopen("1.out", "w", stdout);
    #endif

    scanf("%d%d", &N, &K);
    for(int i = 1; i <= N; i++) scanf("%d", &v[i]);
    for(int i = 1; i < N; i++)
    {
        int x, y;
        scanf("%d%d", &x, &y);
        edg[x].push_back(y);
        edg[y].push_back(x);
        vec[x] += v[y];
        vec[y] += v[x];
    }

    ans = 0;
    DFS(1, 0);

    printf("%lld\n", ans);

    return 0;
}

Compilation message

chase.cpp: In function 'int main()':
chase.cpp:78:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &N, &K);
     ~~~~~^~~~~~~~~~~~~~~~
chase.cpp:79:38: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for(int i = 1; i <= N; i++) scanf("%d", &v[i]);
                                 ~~~~~^~~~~~~~~~~~~
chase.cpp:83:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &x, &y);
         ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2680 KB Output is correct
2 Correct 4 ms 2792 KB Output is correct
3 Correct 4 ms 2964 KB Output is correct
4 Correct 4 ms 2976 KB Output is correct
5 Correct 4 ms 3032 KB Output is correct
6 Correct 4 ms 3032 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2680 KB Output is correct
2 Correct 4 ms 2792 KB Output is correct
3 Correct 4 ms 2964 KB Output is correct
4 Correct 4 ms 2976 KB Output is correct
5 Correct 4 ms 3032 KB Output is correct
6 Correct 4 ms 3032 KB Output is correct
7 Incorrect 7 ms 4324 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 384 ms 136252 KB Output is correct
2 Correct 384 ms 138356 KB Output is correct
3 Correct 271 ms 138356 KB Output is correct
4 Correct 272 ms 164304 KB Output is correct
5 Correct 439 ms 168568 KB Output is correct
6 Correct 425 ms 170588 KB Output is correct
7 Correct 447 ms 172536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2680 KB Output is correct
2 Correct 4 ms 2792 KB Output is correct
3 Correct 4 ms 2964 KB Output is correct
4 Correct 4 ms 2976 KB Output is correct
5 Correct 4 ms 3032 KB Output is correct
6 Correct 4 ms 3032 KB Output is correct
7 Incorrect 7 ms 4324 KB Output isn't correct
8 Halted 0 ms 0 KB -