Submission #64367

#TimeUsernameProblemLanguageResultExecution timeMemory
64367theknife2001Dreaming (IOI13_dreaming)C++17
0 / 100
131 ms10744 KiB
#include <bits/stdc++.h> #include "dreaming.h" #define ii pair< int , int > #define se second #define fi first using namespace std; const int N=1e5+55; vector < ii > vec[N]; bool visited[N]; int d=0; int md=0; int l=1e9+5000; int node; int dfs(int u , int p ,bool q) { // cout<<u<<' '<<p<<endl; visited[u]=1; int d1=0,d2=0; int v,c; int temp=0; for(auto x:vec[u]) { v=x.fi; c=x.se; if(v==p) continue; temp=dfs(v,u,q); temp+=c; if(temp>d2) d2=temp; if(d2>d1) swap(d1,d2); } if(!q&&d<d1+d2) d=d1+d2; if(q) { if(l>max(d1,d-d1)) { l=max(d1,d-d1); node=u; } } return d1; } int travelTime(int n, int M, int L, int A[], int B[], int T[]) { for(int i=0;i<M;i++) { vec[B[i]].push_back({A[i],T[i]}); vec[A[i]].push_back({B[i],T[i]}); } vector < ii > ln; memset(visited,0,sizeof visited); for(int i=0;i<n;i++) { if(visited[i]==0) { d=0; dfs(i,i,0); l=1e9+5555; dfs(i,i,1); md=max(md,d); if(l==0) node=i; ln.push_back({l,node}); } } sort(ln.begin(),ln.end()); int s=ln.size(); if(s==1) return ln[0].fi; for(int i=0;i<s-1;i++) { vec[ln[i].se].push_back({ln[s-1].se,L}); vec[ln[s-1].se].push_back({ln[i].se,L}); } dfs(0,-1,0); return md; }
#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...