제출 #784698

#제출 시각아이디문제언어결과실행 시간메모리
784698vjudge1경주 (Race) (IOI11_race)C++17
21 / 100
3052 ms13048 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...