Submission #659033

#TimeUsernameProblemLanguageResultExecution timeMemory
659033angelo_torresDreaming (IOI13_dreaming)C++17
100 / 100
89 ms32532 KiB
#include <bits/stdc++.h> #include <dreaming.h> using namespace std; typedef pair<int,int> ii; typedef vector<ii> vii; typedef vector<int> vi; int n,m,l,a[100000],b[100000],t[100000]; int gp[100000],dp[100000]; bool vis[100000]; vii adj[100000]; vi gap,gru; void dfs1(int v,int f){ for(auto [u,w] : adj[v]){ if(u == f) continue; dfs1(u,v); dp[v] = max(dp[u]+w,dp[v]); } } void dfs2(int v,int f){ gru.push_back(v); multiset<int> s; for(auto [u,w] : adj[v]){ if(u == f) continue; s.insert(dp[u]+w); } for(auto [u,w] : adj[v]){ if(u == f) continue; s.erase(s.find(dp[u]+w)); int vl; if(!s.empty()){ auto it = s.end(); it--; vl = *it; } else vl = 0; gp[u] = max(gp[v]+w,vl+w); s.insert(dp[u]+w); } for(auto [u,w] : adj[v]){ if(u == f) continue; dfs2(u,v); } } int travelTime(int N,int M,int L,int A[],int B[],int T[]){ int ans = 0; n = N, m = M, l = L; for(int i = 0; i < m; ++i) a[i] = A[i], b[i] = B[i], t[i] = T[i]; // cin >> n >> m >> l; // for(int i = 0; i < m; ++i) // cin >> a[i] >> b[i] >> t[i]; if(n == 1) return 0; for(int i = 0; i < m; ++i){ adj[a[i]].push_back({b[i],t[i]}); adj[b[i]].push_back({a[i],t[i]}); } for(int i = 0; i < n; ++i){ if(vis[i]) continue; dp[i] = 0, gp[i] = 0; dfs1(i,-1); dfs2(i,-1); int mn = dp[i]+gp[i]; for(auto it : gru) ans = max(dp[it]+gp[it],ans), mn = min(max(dp[it],gp[it]),mn), vis[it] = 1; // cout << i << endl; // for(auto it : gru){ // cout << it << " " << dp[it] << " " << gp[it] << endl; // } // cout << mn << " d" << endl; gru.clear(); gap.push_back(mn); // break; } sort(gap.rbegin(),gap.rend()); if((int) gap.size() >= 2) ans = max(ans,gap[0]+gap[1]+l); if((int) gap.size() >= 3) ans = max(ans,gap[1]+gap[2]+l+l); return ans; } // int main(){ // int ldq1[2],ldq2[2],ldq3[3]; // cout << travelTime(0,0,0,ldq1,ldq2,ldq3) << endl; // return 0; // }
#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...