Submission #172307

#TimeUsernameProblemLanguageResultExecution timeMemory
172307ho94949Dreaming (IOI13_dreaming)C++17
100 / 100
142 ms17924 KiB
#include<bits/stdc++.h> using namespace std; #include "dreaming.h" const int MAXN = 101010; vector<pair<int, int>> conn[MAXN]; int dis1[MAXN]; int dis2[MAXN]; bool vis[MAXN]; vector<int> comp; void dfs(int a, int pa, int d, int *dis, bool pcomp) { if(pcomp) comp.push_back(a); dis[a] = d; for(auto [x, w]: conn[a]) if(x != pa) dfs(x, a, d+w, dis, pcomp); } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for(int i=0; i<M; ++i) { conn[A[i]].emplace_back(B[i], T[i]); conn[B[i]].emplace_back(A[i], T[i]); } int ans = 0; vector<int> rads; int tp = 1; for(int i=0; i<N; ++i) { if(vis[i]) continue; dfs(i, -1, 0, dis1, true); int maxd = 0; int maxi = i; for(auto x: comp) if(dis1[x]>maxd) { maxd = dis1[x]; maxi = x; } int d1 = maxi; dfs(d1, -1, 0, dis2, false); maxd = 0; maxi = d1; for(auto x: comp) { if(dis2[x]>maxd) { maxd = dis2[x]; maxi = x; } } int d2 = maxi; dfs(d2, -1, 0, dis1, false); int diam = dis1[d1]; int rad = diam; for(auto x: comp) rad = min(rad, max(dis1[x], dis2[x])); ans = max(ans, diam); rads.push_back(rad); for(auto x: comp) vis[x] = true; comp.clear(); } sort(rads.rbegin(), rads.rend()); if(rads.size() >= 2) ans = max(ans, rads[0] + rads[1] + L); if(rads.size() >= 3) ans = max(ans, rads[1] + rads[2] + 2*L); return ans; }

Compilation message (stderr)

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:28:9: warning: unused variable 'tp' [-Wunused-variable]
     int tp = 1;
         ^~
#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...