이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "race.h"
using namespace std;
#define endl '\n'
#define ll long long
#define all(x) x.begin(), x.end()
vector<pair<int, int>> g[200005];
bool processed[200005];
int sz[200005];
int getSize(int cur, int par = -1) {
sz[cur] = 1;
for (auto next : g[cur]) {
if (next.first != par && !processed[next.first]) sz[cur] += getSize(next.first, cur);
}
return sz[cur];
}
int getCentroid(int cur, int des, int par = -1) {
for (auto next : g[cur]) {
if (next.first != par && !processed[next.first] && sz[next.first] > des / 2) return getCentroid(next.first, des, cur);
}
return cur;
}
int ans = 10e7, k;
int depths[1000005];
queue<int> q;
void solve(int cur, int par, int depth, int sum, int t) {
if (sum > k || depth >= ans) return;
if (sum == k) {
ans = depth;
return;
}
if (t == 0) ans = min(ans, depth + depths[k - sum]);
if (t == 1) {
depths[sum] = min(depths[sum], depth);
q.push(sum);
}
for (auto next : g[cur]) {
if (next.first != par && !processed[next.first] && sum + next.second <= k) {
solve(next.first, cur, depth + 1, sum + next.second, t);
}
}
}
void decompose(int cur = 0) {
int centroid = getCentroid(cur, getSize(cur));
processed[cur] = 1;
while (q.size()) {
int fr = q.front();
q.pop();
depths[fr] = 10e7;
}
for (auto next : g[cur]) {
if (!processed[next.first]) {
solve(next.first, -1, 1, next.second, 0);
solve(next.first, -1, 1, next.second, 1);
}
}
for (auto next : g[cur]) {
if (!processed[next.first]) decompose(next.first);
}
}
int best_path(int N, int K, int H[][2], int L[]) {
k = K;
for (int i = 0; i <= k; i++) depths[i] = 10e7;
ans = N;
for (int i = 0; i < N - 1; i++) {
g[H[i][0]].push_back({H[i][1], L[i]});
g[H[i][1]].push_back({H[i][0], L[i]});
}
decompose();
if (ans == N) return -1;
else return ans;
}
컴파일 시 표준 에러 (stderr) 메시지
race.cpp: In function 'void decompose(int)':
race.cpp:52:9: warning: unused variable 'centroid' [-Wunused-variable]
52 | int centroid = getCentroid(cur, getSize(cur));
| ^~~~~~~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |