제출 #1167913

#제출 시각아이디문제언어결과실행 시간메모리
1167913blueviolet경주 (Race) (IOI11_race)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #define ll long long #define int long long #define pll pair<ll, ll> #define pii pair<int, int> #define io(x) if (fopen(x".inp","r")) {freopen(x".inp","r",stdin),freopen(x".out","w",stdout);} #define mem(c, x) memset(c, x, sizeof(c)) #define all(c) c.begin(), c.end() #define bit(i,j) ((i >> j) & 1) #define pb push_back #define se second #define fi first #define el '\n' using namespace std; template<class T> bool maximize(T &a, const T &b) { return (a < b ? a = b, 1 : 0); } template<class T> bool minimize(T &a, const T &b) { return (a > b ? a = b, 1 : 0); } int dx[8] = {0, 1, 0,-1, 1, 1,-1,-1}; int dy[8] = {1, 0,-1, 0, 1,-1,-1, 1}; const int maxn = 2e5 + 9; const int Inf = 2e9 + 7; const ll Infll = 1e18 + 9; const ll Mod = 1e9 + 7; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ int n, k; vector<pii> adj[maxn]; ll sum[maxn]; int h[maxn], sz[maxn], res = 0x3f3f3f3f; map<ll, int> mp; vector<int> vec[maxn]; void dfs(int u, int par) { sz[u] = 1; for (auto x : adj[u]) { int v = x.fi, w = x.se; if (v == par) continue; sum[v] = sum[u] + w; h[v] = h[u] + 1; dfs(v, u); sz[u] += sz[v]; } } void sack(int u, int par, bool keep) { int hevNode = 0; for (auto v : adj[u]) { if (v.fi == par) continue; if (!hevNode || sz[hevNode] < sz[v.fi]) { hevNode = v.fi; } } for (auto v : adj[u]) { if (v.fi == par || v.fi == hevNode) continue; sack(v.fi, u, 0); } if (hevNode) { sack(hevNode, u, 1); swap(vec[hevNode], vec[u]); } vec[u].pb(u); if (mp.find(sum[u]) == mp.end()) mp[sum[u]] = 0x3f3f3f3f; minimize(mp[sum[u]], h[u]); if (mp.find(k + sum[u]) != mp.end()) minimize(res, mp[k + sum[u]] - h[u]); for (auto z : adj[u]) { int v = z.fi, w = z.se; if (v == par || v == hevNode) continue; for (int x : vec[v]) { if (mp.find(k + 2ll*sum[u] - sum[x]) != mp.end()) minimize(res, h[x] - 2ll*h[u] + mp[k + 2ll*sum[u] - sum[x]]); } for (int x : vec[v]) { vec[u].pb(x); if (mp.find(sum[x]) == mp.end()) mp[sum[x]] = 0x3f3f3f3f; minimize(mp[sum[x]], h[x]); } } if (!keep) { mp.clear(); } } int best_path(int N, int K, int H[][2], int L[]) { n = N; k = K; for (int i=0; i<n-1; i++) { int x = H[i][0] + 1; int y = H[i][1] + 1; int w = L[i]; adj[x].pb({y, w}); adj[y].pb({x, w}); } dfs(1, 1); sack(1, 1, 1); if (res == 0x3f3f3f3f) return -1; return res; }

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/cchnYEaH.o: in function `main':
grader.cpp:(.text.startup+0x28): undefined reference to `best_path(int, int, int (*) [2], int*)'
collect2: error: ld returned 1 exit status