# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
103754 | 2019-04-02T12:40:52 Z | E869120 | Chase (CEOI17_chase) | C++14 | 80 ms | 8716 KB |
#include <iostream> #include <vector> #include <algorithm> using namespace std; #pragma warning (disable: 4996) long long N, V, p[1 << 17], c[1 << 17], ret1, ret2, maxn = 0; vector<int>X[1 << 17]; bool used[1 << 17]; void dfs(int pos, int dep) { maxn = max(maxn, abs(ret1 - ret2)); used[pos] = true; if (dep == V) return; for (int to : X[pos]) { if (used[to] == true) continue; for (int r : X[to]) { c[r]++; if (c[r] == 1) ret2 += p[r]; } dfs(to, dep + 1); for (int r : X[to]) { c[r]--; if (c[r] == 0) ret2 -= p[r]; } } } int main() { scanf("%lld%lld", &N, &V); for (int i = 1; i <= N; i++) scanf("%lld", &p[i]); for (int i = 1; i <= N - 1; i++) { long long u, v; scanf("%lld%lld", &u, &v); X[u].push_back(v); X[v].push_back(u); } for (int i = 1; i <= N; i++) X[i].push_back(i); for (int i = 1; i <= N; i++) { if (N >= 2000 && i >= 2) break; for (int j = 1; j <= N; j++) used[j] = false; ret1 = p[i]; ret2 = 0; for (int j = 1; j <= N; j++) c[j] = 0; for (int j : X[i]) { c[j] = 1; ret2 += p[j]; } dfs(i, 1); } cout << maxn << endl; return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 3456 KB | Output is correct |
2 | Incorrect | 5 ms | 3456 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 3456 KB | Output is correct |
2 | Incorrect | 5 ms | 3456 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 80 ms | 8716 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 3456 KB | Output is correct |
2 | Incorrect | 5 ms | 3456 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |