Submission #684107

#TimeUsernameProblemLanguageResultExecution timeMemory
684107fuad27Dreaming (IOI13_dreaming)C++17
100 / 100
134 ms30932 KiB
#include "dreaming.h" #include<bits/stdc++.h> using namespace std; const int N = 100'010; vector<array<int,2>> g[N]; vector<int> vis; int d[N]; int cnt=0,res=0; void dist(int at, int p) { vis[at]=1; d[at]=0; for(auto to:g[at]) { if(to[0]==p)continue; dist(to[0],at); d[at]=max(d[to[0]]+to[1],d[at]); } } void dfs(int at, int dd) { vis[at]=cnt; d[at]=max(d[at],dd); res=max(res,d[at]); res=max(res,d[at]); multiset<int> ms; for(auto to:g[at]) { if(vis[to[0]])continue; ms.insert(d[to[0]]+to[1]); } ms.insert(dd); for(auto to:g[at]) { if(vis[to[0]])continue; int tmp=d[to[0]]+to[1]; ms.erase(ms.find(tmp)); dfs(to[0],(*(--ms.end()))+to[1]); ms.insert(tmp); } } int travelTime(int n, int m, int l, int a[], int b[], int t[]) { 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]}); } vis.resize(n); for(int i = 0;i<n;i++) { if(!vis[i]) dist(i,-1); } for(int i = 0;i<n;i++){vis[i]=0;} for(int i =0 ;i<n;i++) { if(!vis[i]) { ++cnt; dfs(i,0); } } vector<int> v(n+1,2e9); for(int i = 0;i<n;i++){ v[vis[i]]=min(v[vis[i]],d[i]); } vector<int> aa; for(int i = 1;i<=n;i++) { if(v[i]!=2e9)aa.push_back(v[i]); } sort(aa.begin(),aa.end()); if(aa.size()>=2)res=max(res,aa.back()+aa[aa.size()-2]+l); aa.pop_back(); if(aa.size()>=2)res=max(res,aa.back()+aa[aa.size()-2]+l+l); return res; }
#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...