제출 #900622

#제출 시각아이디문제언어결과실행 시간메모리
900622JakobZorz꿈 (IOI13_dreaming)C++17
100 / 100
58 ms18156 KiB
#include"dreaming.h" #include<iostream> #include<vector> #include<algorithm> #include<unordered_map> using namespace std; typedef long long ll; vector<pair<int,int>>nodes[100000]; bool vis[100000]; int par[100000]; int biggest_depth[100000]; int biggest_len_up[100000]; vector<int>nodes_list; void dfs(int node){ if(vis[node]) return; vis[node]=true; nodes_list.push_back(node); for(auto ne:nodes[node]){ if(vis[ne.first]) par[node]=ne.first; else{ dfs(ne.first); biggest_depth[node]=max(biggest_depth[node],biggest_depth[ne.first]+ne.second); } } } void dfs2(int node){ pair<int,int>deepest1,deepest2; for(auto ne:nodes[node]){ if(ne.first==par[node]) continue; int depth=biggest_depth[ne.first]+ne.second; if(depth>=deepest1.first){ deepest2=deepest1; deepest1={depth,ne.first}; }else if(depth>deepest2.first){ deepest2={depth,ne.first}; } } for(auto ne:nodes[node]){ if(ne.first==par[node]) continue; if(ne.first==deepest1.second){ biggest_len_up[ne.first]=max(biggest_len_up[node],deepest2.first)+ne.second; }else{ biggest_len_up[ne.first]=max(biggest_len_up[node],deepest1.first)+ne.second; } dfs2(ne.first); } } pair<int,int>get_diameter(int root){ nodes_list.clear(); par[root]=-1; dfs(root); dfs2(root); int res=1e9,diam=0; for(int node:nodes_list){ diam=max(diam,biggest_depth[node]+biggest_len_up[node]); res=min(res,max(biggest_depth[node],biggest_len_up[node])); } return {res,diam}; } int travelTime(int N,int M,int L,int A[],int B[],int T[]){ for(int i=0;i<M;i++){ nodes[A[i]].emplace_back(B[i],T[i]); nodes[B[i]].emplace_back(A[i],T[i]); } vector<int>dists; int diam=0; for(int i=0;i<N;i++) if(!vis[i]){ auto r=get_diameter(i); dists.push_back(r.first); diam=max(diam,r.second); } sort(dists.begin(),dists.end()); reverse(dists.begin(),dists.end()); if(dists.size()==1) return max(dists[0],diam); else if(dists.size()==2) return max(dists[0]+dists[1]+L,diam); else return max(max(dists[0]+dists[1]+L,dists[1]+dists[2]+2*L),diam); }
#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...