Submission #789094

#TimeUsernameProblemLanguageResultExecution timeMemory
789094diobrando97Race (IOI11_race)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #pragma GCC optimize(3) #define ll long long #define pii pair<int, int> #define pll pair<long long, long long> #define F first #define S second #define endl '\n' using namespace std; const int inf = 0x3f3f3f3f; const int mod = 1e9 + 7; const int N = 2e5 + 5; double startTime = clock(); double getCurrentTime() { return (double)(clock() - startTime) / CLOCKS_PER_SEC; } int n, k; int ans = inf; int tot = 0, cur = 0; array<int, 3> dis[N]; multiset<int> st[N]; struct CD{ int n; vector<vector<pii>> g; vector<int> par, sz; vector<bool> vis; CD(){} CD(int n){ init(n); } void init(int n){ this->n = n; g.assign(n+1, {}); par.assign(n+1, 0); sz.assign(n+1, 0); vis.assign(n+1, 0); } void addEdge(int x, int y, int w){ g[x].push_back({y, w}); g[y].push_back({x, w}); } void dfs(int i, int f){ sz[i] = 1; for(auto [j, w] : g[i]){ if(j == f || vis[j]) continue; dfs(j, i); sz[i] += sz[j]; } } int getCentroid(int i, int f, int n){ for(auto [j, w] : g[i]){ if(j == f || vis[j]) continue; if(sz[j] * 2 > n) return getCentroid(j, i, n); } return i; } void dfs2(int i, int f, int w, int len, int mark){ if(w > k) return; dis[++tot] = {w, len, mark}; for(auto [j, wj] : g[i]){ if(j == f || vis[j]) continue; dfs2(j, i, w+wj, len+1, mark); } } void work(int i, int f = 0){ dfs(i, f); int cen = getCentroid(i, f, sz[i]); vis[cen] = 1; par[cen] = f; tot = cur = 0; for(auto [j, w] : g[cen]){ if(j == f || vis[j]) continue; dfs2(j, i, w, 1, ++cur); } st[0] = {0}; for(int j=1; j<=tot; j++){ st[dis[j][0]].insert(dis[j][1]); } int x = 1, y = 1; for(int j=1; j<=cur; j++){ while(x <= tot && dis[x][2] == j){ st[dis[x][0]].erase(st[dis[x][0]].find(dis[x][1])); x++; } while(y <= tot && dis[y][2] == j){ int tar = k - dis[y][0]; if(tar >= 0 && tar <= k && !st[tar].empty()){ ans = min(ans, dis[y][1] + *st[tar].begin()); } y++; } } for(auto [j, w] : g[cen]){ if(vis[j]) continue; work(j, cen); } } }; void solve(){ cin >> n >> k; CD cent(n); for(int i=1; i<n; i++){ int x, y, w; cin >> x >> y >> w; x++; y++; cent.addEdge(x, y, w); } memset(dis, 0, sizeof dis); for(int i=1; i<=n; i++) st[i].clear(); cent.work(1, 0); cout << (ans == inf ? -1 : ans) << endl; } int main(){ ios::sync_with_stdio(0); cin.tie(0); //freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); int t = 1; //cin >> t; while(t--) solve(); return 0; }

Compilation message (stderr)

/usr/bin/ld: /tmp/ccKWjL5C.o: in function `main':
race.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccKWR6OD.o:grader.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccKWR6OD.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