Submission #1313706

#TimeUsernameProblemLanguageResultExecution timeMemory
1313706husseinjuandaDreaming (IOI13_dreaming)C++20
47 / 100
44 ms17360 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; #define ll long long vector<int> dp; vector<vector<pair<int, int>>> g; vector<int> d; vector<int> h; void dfs(int k, int p){ d[k] = 1; for(int y = 0; y < g[k].size(); y++){ if(g[k][y].first == p) continue; dfs(g[k][y].first, k); dp[k] = max(dp[k], dp[g[k][y].first]+g[k][y].second); } } int m = 2e9; int mmx = 0; void reroot(int k, int p, int up){ int mx = 0; int mx1 = 0; for(int y = 0; y < g[k].size(); y++){ if(g[k][y].first == p) continue; if(mx < dp[g[k][y].first] + g[k][y].second){ mx1 = mx; mx = dp[g[k][y].first] + g[k][y].second; }else{ mx1 = max(mx1, dp[g[k][y].first] + g[k][y].second); } } h[k] = max(dp[k], up); for(int y = 0; y < g[k].size(); y++){ if(g[k][y].first == p) continue; if(mx == dp[g[k][y].first]+g[k][y].second){ reroot(g[k][y].first, k, max(mx1, up)+g[k][y].second); }else{ reroot(g[k][y].first, k, max(mx, up)+g[k][y].second); } } mmx = max(mmx, h[k]); m = min(m, h[k]); } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { g.resize(N+1); for(int i = 0; i < M; i++){ g[A[i]].push_back({B[i], T[i]}); g[B[i]].push_back({A[i], T[i]}); } int mn = 0; d.resize(N); h.resize(N); dp.resize(N); multiset<int> s; for(int i = 0; i < N; i++){ if(d[i] == 1) continue; m = 1e9; dfs(i, -1); reroot(i, -1, 0); d[i] = -m; // cout << m << "\n"; s.insert(m+L); } for(int i = 0; i < N; i++){ if(d[i] == 1) continue; s.erase(s.find(-d[i]+L)); if(s.size() >= 2){ auto it = s.rbegin(); auto it1 = it; it1++; mn = max(*it + *it1, *it - d[i]); }else if(s.size() >= 1){ mn = -d[i] + *s.rbegin(); } s.insert(-d[i]+L); } // cout << mn << " " << mmx << endl; return max(mn, mmx); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...