Submission #244061

#TimeUsernameProblemLanguageResultExecution timeMemory
244061michaoDreaming (IOI13_dreaming)C++14
0 / 100
63 ms15736 KiB
#include <bits/stdc++.h> #include "dreaming.h" #define mp make_pair #define pb push_back #define ld long double #define pii pair<int,int> #define sz(x) (int)x.size() #define piii pair<pii,pii> #define precise cout<<fixed<<setprecision(10) #define st first #define nd second #define ins insert #define vi vector<int> using namespace std; const int MAX=1e5+5; vector<pii>P[MAX]; int dist[MAX]; int ojciec[MAX]; vi mids; bool O[MAX]; pii get_far(int u,int fa) { pii akt=mp(dist[u],u); ojciec[u]=fa; O[u]=true; for (auto it:P[u]) if (it.st!=fa) { dist[it.st]=dist[u]+it.nd; pii wez=get_far(it.st,u); if (wez.st>akt.st)akt=wez; } return akt; } int get_mid(int from,int ile) { int maxi=0; while (from!=-1) { maxi=max(maxi,max(dist[from],ile-dist[from])); from=ojciec[from]; } return maxi; } void func(int u) { dist[u]=0; pii v=get_far(u,-1); int root=v.nd; dist[root]=0; pii znajdz=get_far(root,-1); int dist=znajdz.st; int wskaz=znajdz.nd; int ile=get_mid(wskaz,dist); mids.pb(ile); } int travelTime(int n,int m,int l,int a[],int b[],int t[]) { int ans=0; for (int i=0;i<m;i++) { int x=a[i]; int y=b[i]; int c=t[i]; x++,y++; P[x].pb(mp(y,c)); P[y].pb(mp(x,c)); } for (int i=1;i<=n;i++) if (!O[i])func(i); sort(mids.begin(),mids.end(),greater<int>()); assert(sz(mids)!=0); assert(mids[0]!=0); if (sz(mids)>=1)ans=max(ans,mids[0]); if (sz(mids)>=2)ans=max(ans,mids[0]+mids[1]+l); if (sz(mids)>=3)ans=max(ans,mids[1]+mids[2]+l*2); return ans; }
#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...