Submission #53577

#TimeUsernameProblemLanguageResultExecution timeMemory
53577alenam0161Dreaming (IOI13_dreaming)C++17
18 / 100
85 ms17784 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]; int cur=0; 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); } } void go(int v,int p,int cp){ int cs=-1; int e=0; int r=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){ if(cs!=-1){ r=di[cs]+e; } cs=to; e=c; } else if(di[to]+c>r){ r=di[to]+c; } } cur=min(cur,max(cp,di[v])); // cout<<v<<" "<<cp<<" "<<di[v]<<" "<<r<<endl; 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==to){ go(to,v,max(cp,r)+c); } else{ go(to,v,max(cp,cs==-1? 0:di[cs]+e)); } } } 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); cur=1e9; go(i,i,0); z.push_back(cur); 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:15:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<g[v].size();++i){
                 ~^~~~~~~~~~~~
dreaming.cpp: In function 'void go(int, int, int)':
dreaming.cpp:27:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<g[v].size();++i){
                 ~^~~~~~~~~~~~
dreaming.cpp:44:19: 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:58: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...