Submission #788500

#TimeUsernameProblemLanguageResultExecution timeMemory
788500LIFDreaming (IOI13_dreaming)C++14
100 / 100
60 ms21108 KiB
#include "dreaming.h" #include<bits/stdc++.h> #include<vector> using namespace std; vector<pair<int,int> > vv[300005]; bool vis1[300005]; bool vis2[300005]; bool vis3[300005]; int dis[300005]; int dis2[300005]; int maxn = -1; int id1 = 0; int id2 = 0; vector<int> temp; vector<int> r; int ans1 = -1;//D int ans2 = -1;//R1+R2+L int ans3 = -1;//R2+R3+L; void dfs1(int now) { vis1[now] = true; for(int i=0;i<vv[now].size();i++) { pair<int,int> pp = vv[now][i]; if(vis1[pp.first] == true)continue; dis[pp.first] = dis[now] + pp.second; if(dis[pp.first] > maxn) { maxn = dis[pp.first]; id1 = pp.first; } dfs1(pp.first); } return; } void dfs2(int now) { vis2[now] = true; for(int i=0;i<vv[now].size();i++) { pair<int,int> pp = vv[now][i]; if(vis2[pp.first] == true)continue; dis2[pp.first] = dis2[now] + pp.second; if(dis2[pp.first] > maxn) { maxn = dis2[pp.first]; id2 = pp.first; } dfs2(pp.first); } return; } bool find_path(int now,int target) { bool can = false; temp.push_back(now); if(now == target)return true; vis3[now] = true; for(int i=0;i<vv[now].size();i++) { pair<int,int> pp = vv[now][i]; if(vis3[pp.first] == true)continue; if(find_path(pp.first,target) == true)can = true; } if(can == false) { temp.pop_back(); return false; } return true; } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for(int i=0;i<M;i++) { vv[A[i]].push_back(make_pair(B[i],T[i])); vv[B[i]].push_back(make_pair(A[i],T[i])); } for(int i=0;i<N;i++) { if(vis1[i] == true)continue; temp.clear(); maxn = -1; id1 = -1; id2 = -1; //be care: if there are only one vertices , id1 -> -1; dfs1(i); /*cout<<endl; cout<<i<<endl; for(int j=0;j<N;j++)cout<<dis[j]<<" "; cout<<endl;*/ maxn = -1; if(id1 == -1)id1 = i; dfs2(id1); if(id2 == -1)id2 = i; /*cout<<id1<<endl; for(int j=0;j<N;j++)cout<<dis2[j]<<" "; cout<<endl;*/ //cout<<endl; bool exis = find_path(id1,id2); ans1 = max(ans1,dis2[id2]); //cout<<ans1<<endl; //D; int rmin = 1e9; for(int j=0;j<temp.size();j++) { int val = max(dis2[temp[j]],dis2[id2] - dis2[temp[j]]); rmin = min(rmin,val); } r.push_back(rmin); } sort(r.begin(),r.end()); if(r.size() >= 2)ans2 = (r[r.size()-1] + r[r.size()-2] + L); if(r.size() >= 3)ans3 = (r[r.size()-2] + r[r.size()-3] + L*2); return max(ans1,max(ans2,ans3)); }

Compilation message (stderr)

dreaming.cpp: In function 'void dfs1(int)':
dreaming.cpp:22:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |  for(int i=0;i<vv[now].size();i++)
      |              ~^~~~~~~~~~~~~~~
dreaming.cpp: In function 'void dfs2(int)':
dreaming.cpp:39:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |  for(int i=0;i<vv[now].size();i++)
      |              ~^~~~~~~~~~~~~~~
dreaming.cpp: In function 'bool find_path(int, int)':
dreaming.cpp:59:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |  for(int i=0;i<vv[now].size();i++)
      |              ~^~~~~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:104:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  104 |   for(int j=0;j<temp.size();j++)
      |               ~^~~~~~~~~~~~
dreaming.cpp:99:8: warning: unused variable 'exis' [-Wunused-variable]
   99 |   bool exis = find_path(id1,id2);
      |        ^~~~
#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...