답안 #223911

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
223911 2020-04-16T20:43:18 Z Leonardo_Paes Museum (CEOI17_museum) C++17
100 / 100
429 ms 169748 KB
#include <bits/stdc++.h>

using namespace std;

#define f first
#define s second

#pragma "Ofast"

const int maxn = 1e4+10, inf = 0x3f3f3f3f;

typedef pair<int,int> pii;

int n, k, x, siz[maxn], dp[maxn][maxn][2];

vector<pii> grafo[maxn];

void dfs(int u, int p = 0){
    siz[u] = 1;

    for(auto v : grafo[u]){
        if(v.f == p) continue;

        dfs(v.f, u);

        siz[u] += siz[v.f];
    }
}

int solve(int u, int p = 0){
    int sizes = 1, d;

    for(auto v : grafo[u]){
        if(v.f == p) continue;

        solve(v.f, u);

        sizes += siz[v.f];

        d = v.s;

        for(int i=sizes; i>=2; i--){
            for(int j=max(0, i-sizes+siz[v.f]); j<=min(i, siz[v.f]); j++){
                dp[u][i][0] = min({dp[u][i][0], dp[u][i-j][0] + dp[v.f][j][1]
                + 2*d, dp[u][i-j][1] + dp[v.f][j][0] + d});
                dp[u][i][1] = min({dp[u][i][1], dp[u][i-j][1] + dp[v.f][j][1] + 2*d});
            }
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);

    cin >> n >> k >> x;

    for(int i=1; i<n; i++){
        int u, v, d;

        cin >> u >> v >> d;

        grafo[u].push_back({v, d});
        grafo[v].push_back({u, d});
    }

    dfs(x);

    for(int i=1; i<=n; i++){
        for(int j=2; j<=siz[i]; j++){
            dp[i][j][0] = dp[i][j][1] = inf;
        }
    }

    solve(x);

    cout << dp[x][k][0] << endl;

    return 0;
}

Compilation message

museum.cpp:8:0: warning: ignoring #pragma "Ofast"  [-Wunknown-pragmas]
 #pragma "Ofast"
 
museum.cpp: In function 'int solve(int, int)':
museum.cpp:50:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 640 KB Output is correct
2 Correct 5 ms 640 KB Output is correct
3 Correct 5 ms 640 KB Output is correct
4 Correct 5 ms 640 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 165 ms 28800 KB Output is correct
2 Correct 161 ms 29176 KB Output is correct
3 Correct 353 ms 164984 KB Output is correct
4 Correct 232 ms 73088 KB Output is correct
5 Correct 183 ms 40184 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 165 ms 28800 KB Output is correct
2 Correct 161 ms 29176 KB Output is correct
3 Correct 353 ms 164984 KB Output is correct
4 Correct 232 ms 73088 KB Output is correct
5 Correct 183 ms 40184 KB Output is correct
6 Correct 162 ms 23584 KB Output is correct
7 Correct 280 ms 107896 KB Output is correct
8 Correct 429 ms 2808 KB Output is correct
9 Correct 335 ms 2936 KB Output is correct
10 Correct 177 ms 3840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 640 KB Output is correct
2 Correct 5 ms 640 KB Output is correct
3 Correct 5 ms 640 KB Output is correct
4 Correct 5 ms 640 KB Output is correct
5 Correct 5 ms 640 KB Output is correct
6 Correct 165 ms 28800 KB Output is correct
7 Correct 161 ms 29176 KB Output is correct
8 Correct 353 ms 164984 KB Output is correct
9 Correct 232 ms 73088 KB Output is correct
10 Correct 183 ms 40184 KB Output is correct
11 Correct 162 ms 23584 KB Output is correct
12 Correct 280 ms 107896 KB Output is correct
13 Correct 429 ms 2808 KB Output is correct
14 Correct 335 ms 2936 KB Output is correct
15 Correct 177 ms 3840 KB Output is correct
16 Correct 168 ms 29568 KB Output is correct
17 Correct 166 ms 29184 KB Output is correct
18 Correct 257 ms 82680 KB Output is correct
19 Correct 358 ms 2816 KB Output is correct
20 Correct 164 ms 4736 KB Output is correct
21 Correct 268 ms 105848 KB Output is correct
22 Correct 166 ms 29048 KB Output is correct
23 Correct 354 ms 2816 KB Output is correct
24 Correct 162 ms 4728 KB Output is correct
25 Correct 358 ms 169748 KB Output is correct