Submission #1296585

#TimeUsernameProblemLanguageResultExecution timeMemory
1296585matematteoDreaming (IOI13_dreaming)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) begin(x), end(x) #define rall(x) rbegin(x), rend(x) #define _ << " " << #define lf "\n" #define ff endl #ifndef EVAL #define infor(fmt, ...) do { fprintf(stderr, fmt, ##__VA_ARGS__); } while(0) #define infof(fmt, ...) do { fprintf(stderr, fmt"\n", ##__VA_ARGS__); } while(0) #else #define infor(...) #define infof(...) #endif using ll = long long; int tunnel(int N, int M, int L, vector<int> A, vector<int> B, vector<int> C) { vector<vector<array<int, 2>>> adj(N); for(int i = 0; i < M; ++i) { adj[A[i]].push_back({B[i], C[i]}); adj[B[i]].push_back({A[i], C[i]}); } vector<int> d(N); vector<int> st(N); vector<bool> vis(N); auto dfs = [&](int v, auto &&dfs) -> void { st[v] = d[v]; vis[v] = 1; for(auto [u, w]: adj[v]) { if(vis[u]) continue; d[u] = w + d[v]; dfs(u, dfs); st[v] = max(st[v], st[u]); } }; for(int i = 0; i < N; ++i) if(!vis[i]) dfs(i, dfs); fill(all(vis), 0); auto reroot = [&](int v, int up, auto &&reroot) -> int { infof("... reroot(%d, %d)", v, up); vis[v] = 1; vector<array<int, 2>> ups = {{max(up, 0), v}}; for(auto [u, w]: adj[v]) { if(vis[u]) continue; ups.push_back({st[u] - d[u] + w, u}); } infor("ups[%d]:"); for(auto [x, n]: ups) infor(" (%d, %d)", x, n); infof(""); sort(rall(ups)); int mn = max(st[v] - d[v], up); for(auto [u, w]: adj[v]) { if(vis[u]) continue; int up_u = ups[0][1] != u ? ups[0][0] : ups[1][0]; infof("... - calling %d with up_u = %d + w", u, up_u); mn = min(mn, reroot(u, up_u + w, reroot)); } return mn; }; vector<int> c; for(int i = 0; i < N; ++i) { if(!vis[i]) infof("------"); if(!vis[i]) c.push_back(reroot(i, 0, reroot)); } infor("c:"); for(auto x: c) infor(" %d", x); infof(""); sort(rall(c)); int ans = c[0]; if(c.size() > 1) ans = max(ans, c[0] + c[1] + L); if(c.size() > 2) ans = max(ans, c[1] + c[2] + 2 * L); infof("============="); fill(all(vis), 0); auto diam = [&](int v, int f, auto &&diam) -> array<int, 2> { vis[v] = 1; array<int, 2> mx = {0, v}; for(auto [u, w]: adj[v]) { if(u == f) continue; auto sus = diam(u, v, diam); sus[0] += w; mx = max(mx, sus); } return mx; }; for(int i = 0; i < N; ++i) { if(vis[i]) continue; auto [_x, j] = diam(i, -1, diam); auto [x, _j] = diam(j, -1, diam); infof("diam[%d] is %d", i, x); ans = max(ans, x); } return ans; } #ifndef EVAL int main() { ios_base::sync_with_stdio(0); cin.tie(0); int N, M, L; cin >> N >> M >> L; vector<int> A(M), B(M), C(M); for (int i = 0; i < M; i ++) cin >> A[i] >> B[i] >> C[i]; cout << tunnel(N, M, L, A, B, C) << '\n'; } #endif

Compilation message (stderr)

/usr/bin/ld: /tmp/ccPcfcxY.o: in function `main':
grader.c:(.text.startup+0xc5): undefined reference to `travelTime'
collect2: error: ld returned 1 exit status