Submission #288269

#TimeUsernameProblemLanguageResultExecution timeMemory
288269BeanZDreaming (IOI13_dreaming)C++14
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #include "dreaming.h" using namespace std; #define ll long long #define endl '\n' const int N = 1e5 + 5; ll dp[N], res, vis[N], vis2[N], diameter; vector<pair<ll, ll>> node[N]; void dfsFirst(ll u){ vis[u] = 1; for (auto j : node[u]){ if (vis[j.first]) continue; dfsFirst(j.first); dp[u] = max(dp[u], dp[j.first] + j.second); } } void reroot(ll u, ll v){ dp[u] = 0; for (auto j : node[u]){ if (j.first == v) continue; dp[u] = max(dp[u], dp[j.first] + j.second); } dp[v] = 0; for (auto j : node[v]){ dp[v] = max(dp[v], dp[j.first] + j.second); } if (res >= dp[v]){ res = min(res, dp[v]); vector<ll> mem; for (auto j : node[v]){ mem.push_back(dp[j.first] + j.second); } ok = 0; if (mem.size()){ sort(mem.begin(), mem.end()); for (int i = mem.size() - 1; i >= max((ll)mem.size() - 2, 0ll); i--){ ok += mem[i]; } } diameter = max(diameter, ok); } } void dfs(ll u, ll p){ for (auto j : node[u]){ if (j.first == p) continue; reroot(u, j.first); dfs(j.first, u); reroot(j.first, u); } } void fuck(ll u){ vector<ll> mem; for (auto j : node[u]){ mem.push_back(dp[j.first] + j.second); } diameter = 0; if (mem.size()){ sort(mem.begin(), mem.end()); for (int i = mem.size() - 1; i >= max((ll)mem.size() - 2, 0ll); i--){ diameter += mem[i]; } } } int travelTime(int N, int M, int L, int A[],int B[],int T[]){ for (int i = 1; i <= M; i++){ node[A[i - 1]].push_back({B[i - 1], T[i - 1]}); node[B[i - 1]].push_back({A[i - 1], T[i - 1]}); } priority_queue<ll> pq; ll ans = 0; for (int i = 1; i <= N; i++){ if (!vis[i]){ diameter = 0; dfsFirst(i); res = dp[i]; fuck(i); dfs(i, i); ans = max(ans, diameter); pq.push(res); } } ll root = pq.top(); pq.pop(); ll mx = -1e18; ll res = root; while (pq.size()){ ans = max(ans, pq.top() + 2 * L + mx); ans = max(ans, pq.top() + L + root); mx = max(mx, pq.top()); pq.pop(); } return ans; } /* int main(){ ios_base::sync_with_stdio(false); cin.tie(0); if (fopen("VietCT.INP", "r")){ freopen("VietCT.INP", "r", stdin); freopen("VietCT.OUT", "w", stdout); } int n, m, l; cin >> n >> m >> l; vector<int> a, b, t; for (int i = 1; i <= m; i++){ int u, v, c; cin >> u >> v >> c; a.push_back(u + 1); b.push_back(v + 1); t.push_back(c); } cout << travelTime(n, m, l, a, b, t); } */ /* */

Compilation message (stderr)

dreaming.cpp: In function 'void reroot(long long int, long long int)':
dreaming.cpp:35:17: error: 'ok' was not declared in this scope
   35 |                 ok = 0;
      |                 ^~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:87:12: warning: unused variable 'res' [-Wunused-variable]
   87 |         ll res = root;
      |            ^~~