답안 #598020

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
598020 2022-07-17T10:38:38 Z OttoTheDino Chase (CEOI17_chase) C++17
40 / 100
363 ms 524288 KB
#include <bits/stdc++.h>
using namespace std;

#define rep(i,s,e)                  for (ll i = s; i <= e; ++i)
#define rrep(i,s,e)                 for (ll i = s; i >= e; --i)
#define pb                          push_back
#define pf                          push_front
#define fi                          first
#define se                          second
#define all(a)                      a.begin(), a.end()
#define len(a)                      (ll)a.size()
typedef long long ll;
typedef pair<ll, ll> ii;
typedef pair<ll, ll> pll;
typedef vector<ii> vii;
typedef vector<ll> vi;
typedef vector<double> vd;
typedef vector<string> vs;
typedef vector<ll> vll;

const ll mx = 1e5, mxv = 100;
ll p[mx+1], s[mx+1];
vi adj[mx+1];
map<int,ll> dp[mx+1][mxv+1];
ll dp2[mx+1][mxv+1], done[mx+1][mxv+1];

ll dfs (int u, int par, int cnt)  {
    if (cnt==0) return 0;

    if (dp[u][cnt].find(par)!=dp[u][cnt].end()) return dp[u][cnt][par];

    dp[u][cnt][par] = s[u]-p[par];

    for (int v : adj[u]) {
        if (v==par) continue;
        dp[u][cnt][par] = max(dp[u][cnt][par], max(s[u]-p[par]+dfs(v,u,cnt-1), dfs(v,u,cnt))); 
    }

    return dp[u][cnt][par];
}

ll dfs2 (int u, int par, int cnt) {
    if (cnt==0) return 0;

    if (done[u][cnt]) return dp2[u][cnt];

    dp2[u][cnt] = s[u]-p[par];

    for (int v : adj[u]) {
        if (v==par) continue;
        dp2[u][cnt] = max(dp2[u][cnt], max(s[u]-p[par]+dfs2(v,u,cnt-1), dfs2(v,u,cnt))); 
    }

    done[u][cnt] = 1;
    return dp2[u][cnt];
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    ll n, l; cin >> n >> l;

    rep (i,1,n) cin >> p[i];

    rep (i,1,n-1) {
        ll u, v; cin >> u >> v;
        adj[u].pb(v);
        adj[v].pb(u);
    }

    rep (i,1,n) for (int v : adj[i]) s[i] += p[v];

    if (n>1000) {
        cout << dfs2 (1, 0, l) << "\n";
        return 0;
    }

    ll ans = 0;
    rep (i,1,n) {
        ans = max(ans, dfs (i, 0, l));
    }

    cout << ans << "\n";

    return 0;
}

# 결과 실행 시간 메모리 Grader output
1 Correct 200 ms 477004 KB Output is correct
2 Correct 209 ms 477020 KB Output is correct
3 Correct 214 ms 477004 KB Output is correct
4 Correct 204 ms 477264 KB Output is correct
5 Correct 202 ms 476952 KB Output is correct
6 Correct 201 ms 476924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 200 ms 477004 KB Output is correct
2 Correct 209 ms 477020 KB Output is correct
3 Correct 214 ms 477004 KB Output is correct
4 Correct 204 ms 477264 KB Output is correct
5 Correct 202 ms 476952 KB Output is correct
6 Correct 201 ms 476924 KB Output is correct
7 Correct 239 ms 486184 KB Output is correct
8 Correct 209 ms 477764 KB Output is correct
9 Correct 363 ms 477496 KB Output is correct
10 Correct 207 ms 478492 KB Output is correct
11 Correct 217 ms 478480 KB Output is correct
12 Correct 207 ms 477832 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 226 ms 524288 KB Execution killed with signal 9
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 200 ms 477004 KB Output is correct
2 Correct 209 ms 477020 KB Output is correct
3 Correct 214 ms 477004 KB Output is correct
4 Correct 204 ms 477264 KB Output is correct
5 Correct 202 ms 476952 KB Output is correct
6 Correct 201 ms 476924 KB Output is correct
7 Correct 239 ms 486184 KB Output is correct
8 Correct 209 ms 477764 KB Output is correct
9 Correct 363 ms 477496 KB Output is correct
10 Correct 207 ms 478492 KB Output is correct
11 Correct 217 ms 478480 KB Output is correct
12 Correct 207 ms 477832 KB Output is correct
13 Runtime error 226 ms 524288 KB Execution killed with signal 9
14 Halted 0 ms 0 KB -