Submission #409225

#TimeUsernameProblemLanguageResultExecution timeMemory
409225pliamDreaming (IOI13_dreaming)C++14
100 / 100
125 ms21540 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define MAXN 100005 #define INF (ll)1e9+5 using namespace std; typedef long long ll; vector<pair<int,ll>> adj[MAXN];//(to,weight) ll dp_down1[MAXN],dp_down2[MAXN],dp_d[MAXN],dp_up[MAXN],ans[MAXN]; bool visited[MAXN]; ll min_len,id_min; vector<pair<ll,int>> rep;//(weight,id) int n; ll res; void dfs1(int curr,int par=-1){ visited[curr]=true; for(auto p:adj[curr]){ int to = p.first; ll w = p.second; if(to==par) continue; dfs1(to,curr); if(dp_down1[to]+w>dp_down1[curr]){ dp_down1[curr]=dp_down1[to]+w; dp_d[curr]=to; } } for(auto p:adj[curr]){ int to = p.first; ll w = p.second; if(to==par||to==dp_d[curr]) continue; if(dp_down1[to]+w>dp_down2[curr]){ dp_down2[curr]=dp_down1[to]+w; } } } void dfs2(int curr,int par=-1,int wpar=0){ if(par!=-1){ if(dp_d[par]!=curr) dp_up[curr]=max(dp_up[par],dp_down1[par])+wpar; else dp_up[curr]=max(dp_up[par],dp_down2[par])+wpar; } ans[curr]=max(dp_up[curr],dp_down1[curr]); if(ans[curr]<min_len){ min_len=ans[curr]; id_min=curr; } res=max(res,ans[curr]); for(auto p:adj[curr]){ int to = p.first; ll w = p.second; if(to==par) continue; dfs2(to,curr,w); } } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { 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(!visited[i]){ min_len=INF; dfs1(i); dfs2(i); rep.push_back({min_len,id_min}); } } sort(rep.begin(),rep.end()); int rsize=rep.size(); if(rsize==1){ return res; }else if(rsize==2){ return max(rep[rsize-1].first+rep[rsize-2].first+L,res); }else{ return max({rep[rsize-1].first+rep[rsize-2].first+L,rep[rsize-2].first+rep[rsize-3].first+2*L,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...