Submission #157543

#TimeUsernameProblemLanguageResultExecution timeMemory
157543GioChkhaidzeDreaming (IOI13_dreaming)C++14
100 / 100
137 ms21260 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define F first #define S second #define Pb push_back using namespace std; const int N=2e5+5; long long res,X,n,m,l,ko,Y,Res,f[N]; vector < pair < long long , long long > > v[N]; vector < long long > V,G; void Dfs(long long x,long long p,long long val,long long j) { if (res<=val) { X=x; res=val; } f[x]=j; for (int i=0; i<v[x].size(); i++) if (f[v[x][i].F]!=j && v[x][i].F!=p) Dfs(v[x][i].F,x,val+v[x][i].S,j); } void Df(long long x,long long p,long long val,long long j) { if (ko) { V.push_back(val); return ; } if (x==Y) { ko=1; return ; } f[x]=j; for (int i=0; i<v[x].size(); i++) if (f[v[x][i].F]!=j && v[x][i].F!=p) { Df(v[x][i].F,x,val+v[x][i].S,j); if (ko) { V.push_back(val); return ; } } } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { int n=N,m=M,l=L; for (int i=0; i<m; i++) { v[A[i]].Pb({B[i],T[i]}); v[B[i]].Pb({A[i],T[i]}); } for (int i=0; i<n; i++) if (!f[i]) { V.clear(); res=0,X=0,Y=0,ko=0; Dfs(i,i,0,1); res=0,Y=X; Dfs(X,X,0,2); Res=max(Res,res); Df(X,X,0,3); long long Nq=1e13; for (int j=0; j<V.size(); j++) Nq=min(Nq,max(res-V[j],V[j])); if (Nq==1e13) Nq=0; G.push_back(Nq); } sort(G.begin(),G.end()); if (G.size()==1) { return Res; return 0; } if (G.size()==2) { return max(Res,G[0]+G[1]+l); return 0; } return max(Res,max(G[G.size()-1]+G[G.size()-2]+l,G[G.size()-3]+G[G.size()-2]+2*l)); }

Compilation message (stderr)

dreaming.cpp: In function 'void Dfs(long long int, long long int, long long int, long long int)':
dreaming.cpp:15:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0; i<v[x].size(); i++)
                   ~^~~~~~~~~~~~
dreaming.cpp: In function 'void Df(long long int, long long int, long long int, long long int)':
dreaming.cpp:23:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0; i<v[x].size(); i++)
                   ~^~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:48:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int j=0; j<V.size(); j++)
                           ~^~~~~~~~~
#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...