답안 #571767

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
571767 2022-06-02T16:47:45 Z piOOE Chase (CEOI17_chase) C++17
20 / 100
4000 ms 6536 KB
#include <bits/stdc++.h>

using namespace std;

#define sz(x) ((int)size(x))
#define all(x) begin(x), end(x)
#define trace(x) cout << #x << ": " << (x) << endl;

typedef long long ll;

mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());

int rand(int l, int r) { return (int) ((ll) rnd() % (r - l + 1)) + l; }

const int N = 100001;
const ll infL = 3e18;

vector<int> g[N];
int n, k, parent[N], depth[N];
ll p[N], pp[N];

void dfs(int v) {
    for (int to: g[v]) {
        if (to != parent[v]) {
            parent[to] = v;
            depth[to] = depth[v] + 1;
            dfs(to);
        }
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> k;
    for (int i = 0; i < n; ++i) {
        cin >> p[i];
    }
    for (int i = 1; i < n; ++i) {
        int a, b;
        cin >> a >> b;
        --a, --b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    ll ans = 0;
    if (n <= 1000) {
        for (int s = 0; s < n; ++s) {
            parent[s] = -1;
            depth[s] = 1;
            dfs(s);
            for (int t = 0; t < n; ++t) {
                vector<int> now;
                {
                    int x = t;
                    while (x != -1) {
                        now.push_back(x);
                        x = parent[x];
                    }
                }
                assert(sz(now) == depth[t]);
                vector<ll> nw;
                for (int i = 0; i < sz(now); ++i) {
                    int v = now[i];
                    ll sum = 0;
                    for (int to: g[v]) {
                        if (i == 0 || to != now[i - 1])
                            sum += p[to];
                    }
                    nw.push_back(sum);
                }
                sort(all(nw), greater<>());
                ans = max(ans, accumulate(nw.begin(), nw.begin() + min(k, sz(nw)), 0ll));
            }
        }
        cout << ans;
    } else {

    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2644 KB Output is correct
2 Correct 1 ms 2644 KB Output is correct
3 Correct 2 ms 2644 KB Output is correct
4 Correct 2 ms 2644 KB Output is correct
5 Correct 1 ms 2644 KB Output is correct
6 Correct 1 ms 2644 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2644 KB Output is correct
2 Correct 1 ms 2644 KB Output is correct
3 Correct 2 ms 2644 KB Output is correct
4 Correct 2 ms 2644 KB Output is correct
5 Correct 1 ms 2644 KB Output is correct
6 Correct 1 ms 2644 KB Output is correct
7 Execution timed out 4049 ms 2644 KB Time limit exceeded
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 33 ms 6536 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2644 KB Output is correct
2 Correct 1 ms 2644 KB Output is correct
3 Correct 2 ms 2644 KB Output is correct
4 Correct 2 ms 2644 KB Output is correct
5 Correct 1 ms 2644 KB Output is correct
6 Correct 1 ms 2644 KB Output is correct
7 Execution timed out 4049 ms 2644 KB Time limit exceeded
8 Halted 0 ms 0 KB -