Submission #1263450

#TimeUsernameProblemLanguageResultExecution timeMemory
1263450kl0989eDreaming (IOI13_dreaming)C++20
100 / 100
45 ms18248 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define pb push_back #define vi vector<int> #define vl vector<ll> #define pi pair<int, int> #define pl pair<ll,ll> #define all(x) (x).begin(),(x).end() const int maxn=1e5+10; vector<vector<pi>> graph(maxn); vector<pi> dst1(maxn,{0,-1}),dst2(maxn,{0,-1}); vi seen(maxn,0); int dia=0; multiset<int> mx; void dfs(int cur, int prev) { seen[cur]=1; for (auto [to,c]:graph[cur]) { if (to==prev) { continue; } dfs(to,cur); if (dst1[to].fi+c>dst1[cur].fi) { dst2[cur]=dst1[cur]; dst1[cur]={dst1[to].fi+c,to}; } else if (dst1[to].fi+c>dst2[cur].fi) { dst2[cur]={dst1[to].fi+c,to}; } } dia=max(dia,dst1[cur].fi+dst2[cur].fi); } int dfs2(int cur, int prev) { int mn=dst1[cur].fi; for (auto [to,c]:graph[cur]) { if (to==prev) { continue; } int t; if (dst1[cur].se!=to) { t=dst1[cur].fi+c; } else { t=dst2[cur].fi+c; } if (t>dst1[to].fi) { dst2[to]=dst1[to]; dst1[to]={t,cur}; } else if (t>dst2[to].fi) { dst2[to]={t,cur}; } mn=min(mn,dfs2(to,cur)); } return mn; } int travelTime(int n, int m, int l, int a[], int b[], int t[]) { for (int i=0; i<m; i++) { graph[a[i]].pb({b[i],t[i]}); graph[b[i]].pb({a[i],t[i]}); } for (int i=0; i<n; i++) { if (!seen[i]) { dfs(i,i); mx.insert(dfs2(i,i)); if (mx.size()>3) { mx.extract(mx.begin()); } } } if (mx.size()==3) { dia=max(dia,*mx.begin()+*next(mx.begin())+2*l); dia=max(dia,*next(mx.begin())+*next(next(mx.begin()))+l); } else if (mx.size()==2) { dia=max(dia,*mx.begin()+*next(mx.begin())+l); } return dia; }
#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...