Submission #749894

#TimeUsernameProblemLanguageResultExecution timeMemory
749894StefanSebezRace (IOI11_race)C++14
0 / 100
6 ms5784 KiB
#include "race.h" #include<bits/stdc++.h> using namespace std; const int N=2*1e5+50; const int inf=1e9+50; vector<pair<int,int> >E[N]; bool bul[N]; int sz[N],parent[N],root,dist[N],depth[N]; int res=inf,k; map<int,int>mapa; void DFS(int u) { sz[u]=1; for(auto i:E[u]) { if(i.first!=parent[u] && bul[i.first]==false) { parent[i.first]=u; DFS(i.first); sz[u]+=sz[i.first]; } } } int DFSc(int u) { int ind,maks=0; for(auto i:E[u]) { if(i.first!=parent[u] && bul[i.first]==false && sz[i.first]>maks) { maks=sz[i.first]; ind=i.first; } } if(maks*2>sz[root]) { return DFSc(ind); } else { return u; } } void DFSdist(int u,int w) { dist[u]=dist[parent[u]]+w; depth[u]=depth[parent[u]]+1; if(k-dist[u]==0) { res=min(res,depth[u]); } else if(k-dist[u]>0 && mapa[k-dist[u]]!=0) { res=min(res,depth[u]+mapa[k-dist[u]]); } for(auto i:E[u]) { if(i.first!=parent[u] && bul[i.first]==false) { DFSdist(i.first,i.second); } } } void DFSadd(int u) { if(mapa[dist[u]]==0) { mapa[dist[u]]=depth[u]; } else { mapa[dist[u]]=min(mapa[dist[u]],depth[u]); } for(auto i:E[u]) { if(i.first!=parent[u] && bul[i.first]==false) { DFSadd(i.first); } } } void DFSclear(int u) { sz[u]=0; dist[u]=0; depth[u]=0; for(auto i:E[u]) { if(i.first!=parent[u] && bul[i.first]==false) { DFSclear(i.first); } } //parent[u]=-1; } void cdecomp(int u) { //printf("da"); root=u; DFS(u); //printf("1"); int cent=DFSc(u); //printf("2"); DFSclear(u); for(int i=0;i<=N;i++) { parent[i]=-1; } //printf("3"); DFS(cent); //printf("4"); for(auto i:E[cent]) { if(bul[i.first]==false) { DFSdist(i.first,i.second); DFSadd(i.first); } } //printf("5"); //printf("da"); DFSclear(cent); for(int i=0;i<=N;i++) { parent[i]=-1; } //printf("6"); bul[cent]=true; for(auto i:E[cent]) { if(bul[i.first]==false) { cdecomp(i.first); } } } int best_path(int n, int K, int H[][2], int L[]) { k=K; for(int i=0;i<n-1;i++) { E[H[i][0]].push_back({H[i][1],L[i]}); E[H[i][1]].push_back({H[i][0],L[i]}); } for(int i=0;i<=n+50;i++) { parent[i]=-1; } cdecomp(0); if(res==inf) { res=-1; } return res; }

Compilation message (stderr)

race.cpp: In function 'void cdecomp(int)':
race.cpp:107:12: warning: iteration 200050 invokes undefined behavior [-Waggressive-loop-optimizations]
  107 |   parent[i]=-1;
      |   ~~~~~~~~~^~~
race.cpp:105:15: note: within this loop
  105 |  for(int i=0;i<=N;i++)
      |              ~^~~
race.cpp:125:12: warning: iteration 200050 invokes undefined behavior [-Waggressive-loop-optimizations]
  125 |   parent[i]=-1;
      |   ~~~~~~~~~^~~
race.cpp:123:15: note: within this loop
  123 |  for(int i=0;i<=N;i++)
      |              ~^~~
race.cpp: In function 'int DFSc(int)':
race.cpp:29:23: warning: 'ind' may be used uninitialized in this function [-Wmaybe-uninitialized]
   29 |   if(i.first!=parent[u] && bul[i.first]==false && sz[i.first]>maks)
      |               ~~~~~~~~^
race.cpp: In function 'void cdecomp(int)':
race.cpp:107:12: warning: 'void* __builtin_memset(void*, int, long unsigned int)' forming offset [800200, 800203] is out of the bounds [0, 800200] of object 'parent' with type 'int [200050]' [-Warray-bounds]
  107 |   parent[i]=-1;
      |   ~~~~~~~~~^~~
race.cpp:8:11: note: 'parent' declared here
    8 | int sz[N],parent[N],root,dist[N],depth[N];
      |           ^~~~~~
race.cpp:125:12: warning: 'void* __builtin_memset(void*, int, long unsigned int)' forming offset [800200, 800203] is out of the bounds [0, 800200] of object 'parent' with type 'int [200050]' [-Warray-bounds]
  125 |   parent[i]=-1;
      |   ~~~~~~~~~^~~
race.cpp:8:11: note: 'parent' declared here
    8 | int sz[N],parent[N],root,dist[N],depth[N];
      |           ^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...