Submission #1267156

#TimeUsernameProblemLanguageResultExecution timeMemory
1267156lambiguinhoDreaming (IOI13_dreaming)C++20
18 / 100
38 ms18500 KiB
#include <bits/stdc++.h> #include "dreaming.h" using namespace std; pair<int,int> dfs(int a, int ant, int d, vector<vector<pair<int,int>>>& v, vector<pair<int,int>>& pais, vector<bool>& vis) { pair<int,int> resp = {d,a}; pais[a] = {d,ant}; vis[a] = 1; for (auto [c,b] : v[a]) { if (b != ant) { resp = max(resp,dfs(b,a,d+c,v,pais,vis)); } } return resp; } pair<int,int> centro(int a, int b, int d, vector<pair<int,int>>& pais) { int val = d; while (pais[a].first > d/2) { val = pais[a].first; a = pais[a].second; } return {d,max(val,pais[a].first)}; } int travelTime(int n, int m, int l, int inp1[], int inp2[], int inpval[]) { vector<vector<pair<int,int>>> v(n); vector<pair<int,int>> pais(n,{0,-1}); vector<bool> vis(n,0); for (int i = 0; i < m; i++) { int a = inp1[i], b = inp2[i], c = inpval[i]; v[a].push_back({c,b}); v[b].push_back({c,a}); } vector<pair<int,int>> diam; int resp = 0, len = 0; for (int i = 0; i < n; i++) { if (!vis[i]) { len++; auto [_,a] = dfs(i,-1,0,v,pais,vis); auto [d,b] = dfs(a,-1,0,v,pais,vis); diam.push_back(centro(b,a,d,pais)); resp = max(resp,diam[len-1].first); } } sort(diam.begin(),diam.end()); if (len > 2) { resp = max(resp,diam[len-2].second + diam[len-3].second + 2*l); } if (len > 1) { resp = max(resp, diam[len-1].second + diam[len-2].second + l); } return resp; }
#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...