Submission #53575

#TimeUsernameProblemLanguageResultExecution timeMemory
53575alenam0161Dreaming (IOI13_dreaming)C++17
18 / 100
82 ms16376 KiB
# include "dreaming.h" #include <iostream> #include <vector> #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> using namespace std; const int Mxn=1e5+7; vector<int> g[Mxn],cost[Mxn]; bool used[Mxn]; int di[Mxn]; void dfs(int v,int p){ for(int i=0;i<g[v].size();++i){ int to=g[v][i]; int c=cost[v][i]; if(to==p)continue; dfs(to,v); di[v]=max(di[v],di[to]+c); } } int go(int v,int p,int cp){ int cs=-1; int e=0; for(int i=0;i<g[v].size();++i){ int to=g[v][i]; int c=cost[v][i]; if(to==p)continue; if(cs==-1||di[cs]+e<di[to]+c){ cs=to; e=c; } } // cout<<v<<" "<<cp<<" "<<cs<<endl; if(cs!=-1){ int q=0; for(int i=0;i<g[v].size();++i){ int to=g[v][i]; int c=cost[v][i]; if(to==p||to==cs)continue; q=max(q,c+di[to]); } if(max(di[cs]+e,max(q,cp))<=max(di[cs],max(q,cp)+e)){ return max(di[cs]+e,max(q,cp)); } else{ return go(cs,v,max(q,cp)+e); } } else{ return cp; } } void dfs_fill(int v,int p){ used[v]=true; for(int i=0;i<g[v].size();++i){ if(used[g[v][i]]==true)continue; dfs_fill(g[v][i],v); } } int travelTime (int N, int M, int L, int A[], int B[], int T[]) { memset(di,0,sizeof(di)); memset(used,0,sizeof(used)); for(int i=0;i<M;++i){ g[A[i]].push_back(B[i]); g[B[i]].push_back(A[i]); cost[A[i]].push_back(T[i]); cost[B[i]].push_back(T[i]); } vector<int> z; for(int i=0;i<N;++i){ if(used[i]==false){ dfs(i,i); z.push_back(go(i,i,0)); dfs_fill(i,i); } } sort(z.begin(),z.end()); reverse(z.begin(),z.end()); if(z.size()==1)return z[0]; if(z.size()==2){ return z[0]+L+z[1]; } return max(z[0]+L+z[1],L+L+z[1]+z[2]); }

Compilation message (stderr)

dreaming.cpp: In function 'void dfs(int, int)':
dreaming.cpp:14:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<g[v].size();++i){
                 ~^~~~~~~~~~~~
dreaming.cpp: In function 'int go(int, int, int)':
dreaming.cpp:25:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<g[v].size();++i){
                 ~^~~~~~~~~~~~
dreaming.cpp:37:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<g[v].size();++i){
                     ~^~~~~~~~~~~~
dreaming.cpp: In function 'void dfs_fill(int, int)':
dreaming.cpp:56:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<g[v].size();++i){
                 ~^~~~~~~~~~~~
#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...