Submission #1314582

#TimeUsernameProblemLanguageResultExecution timeMemory
1314582t6stks경주 (Race) (IOI11_race)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #include "race.h" #define F first #define S second #define SZ(x) ((int)(x).size()) #define ALL(x) x.begin(), x.end() using namespace std; using ll = long long; using vi = vector<int>; using vl = vector<ll>; using vvi = vector<vi>; using vvl = vector<vl>; using pii = pair<int, int>; using pll = pair<ll, ll>; using vii = vector<pii>; using vll = vector<pll>; static const int INF = 0x3f3f3f3f; static const int maxn = 200005; static const int maxk = 1000005; static int n, k; static array<int, maxn> sz; static array<int, maxk> mn; static array<vii, maxn> adj; static bitset<maxn> removed; void build_size(int u, int p) { sz[u] = 1; for (auto &[v, w]: adj[u]) { if (v == p || removed[v]) continue; build_size(v, u); sz[v] += sz[u]; } } int find_centroid(int u, int p, int tree_size) { for (auto &[v, w]: adj[u]) { if (v == p || removed[v]) continue; if (sz[v] > tree_size / 2) return find_centroid(v, u, tree_size); } return u; } int dfs_get(int u, int p, int dep, int dis) { if (dis > k) return INF; int ans = min(dep + mn[k - dis], INF); for (auto &[v, w]: adj[u]) { if (v == p || removed[v]) continue; ans = min(ans, dfs_get(v, u, dep + 1, dis + w)); } return ans; } void dfs_upd(int u, int p, int dep, int dis, vi& used) { if (dis > k) return; mn[dis] = min(mn[dis], dep); used.push_back(dis); for (auto &[v, w]: adj[u]) { if (v == p || removed[v]) continue; dfs_upd(v, u, dep + 1, dis + w, used); } } int centroid_decomposition(int root) { build_size(root, -1); int centroid = find_centroid(root, -1, sz[root]); int ans = INF; vi used; for (auto &[v, w]: adj[centroid]) { if (removed[v]) continue; ans = min(ans, dfs_get(v, centroid, 1, w, used)); dfs_upd(v, centroid, 1, w); } for (int x: used) if (x > 0) mn[x] = INF; removed[centroid] = 1; for (auto& [v, w]: adj[centroid]) { if (removed[v]) continue; ans = min(ans, centroid_decomposition(v)); } return ans; } int best_path(int _n, int _k, int edges[][2], int W[]) { n = _n, k = _k; for (int i = 0; i < n - 1; i++) { int u = edges[i][0], v = edges[i][1]; adj[u].push_back({v, W[i]}); adj[v].push_back({u, W[i]}); } for (int i = 1; i <= k; i++) { mn[i] = INF; } int ans = centroid_decomposition(0); if (ans >= INF) ans = -1; return ans; }

Compilation message (stderr)

race.cpp: In function 'int centroid_decomposition(int)':
race.cpp:74:31: error: too many arguments to function 'int dfs_get(int, int, int, int)'
   74 |         ans = min(ans, dfs_get(v, centroid, 1, w, used));
      |                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
race.cpp:46:5: note: declared here
   46 | int dfs_get(int u, int p, int dep, int dis) {
      |     ^~~~~~~
race.cpp:75:16: error: too few arguments to function 'void dfs_upd(int, int, int, int, vi&)'
   75 |         dfs_upd(v, centroid, 1, w);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~
race.cpp:56:6: note: declared here
   56 | void dfs_upd(int u, int p, int dep, int dis, vi& used) {
      |      ^~~~~~~