Submission #291456

#TimeUsernameProblemLanguageResultExecution timeMemory
291456cig32Dreaming (IOI13_dreaming)C++14
0 / 100
237 ms26136 KiB
#include "dreaming.h" #include <bits/stdc++.h> #define ll long long using namespace std; vector<pair<ll,ll> >adjlist[100000]; bool visited[100000]; pair<ll,ll> maxi={0,LLONG_MAX}; void dfs(ll node,ll dist_so_far){ if(visited[node]==false){ visited[node]=true; if(maxi.first<dist_so_far || (maxi.first==dist_so_far && maxi.second>node)){ maxi={dist_so_far,node}; } for(ll i=0;i<adjlist[node].size();i++){ if(visited[adjlist[node][i].first]==false){ dfs(adjlist[node][i].first,adjlist[node][i].second+dist_so_far); } } } } vector<ll>yes; stack<ll>hmph; void dfs2(ll node,ll dist_so_far){ if(visited[node]==false){ visited[node]=true; hmph.push(node); if(maxi.first==dist_so_far && maxi.second==node){ while(hmph.size()){ yes.push_back(hmph.top()); hmph.pop(); } reverse(yes.begin(),yes.end()); return; } for(ll i=0;i<adjlist[node].size();i++){ if(visited[adjlist[node][i].first]==false){ dfs2(adjlist[node][i].first,adjlist[node][i].second+dist_so_far); } } if(hmph.size()) hmph.pop(); } } int travelTime(int N,int M,int L,int A[],int B[],int T[]){ if(N==1){ return 0; } map<pair<ll,ll>,ll>mp; for(ll i=0;i<M;i++){ adjlist[A[i]].push_back({B[i],T[i]}); adjlist[B[i]].push_back({A[i],T[i]}); mp[{A[i],B[i]}]=T[i]; mp[{B[i],A[i]}]=T[i]; } for(ll i=0;i<N;i++) visited[i]=false; vector<ll>starting; for(ll i=0;i<N;i++){ if(visited[i]==false){ dfs(i,0); starting.push_back(maxi.second); maxi={0,LLONG_MAX}; } } for(ll i=0;i<N;i++){ visited[i]=false; } vector<pair<ll,ll> > diameters; vector<vector<ll> > paths; vector<pair<ll,ll> > maxrecord; for(ll i=0;i<starting.size();i++){ dfs(starting[i],0); diameters.push_back({starting[i],maxi.second}); maxrecord.push_back(maxi); maxi={0,LLONG_MAX}; } for(ll i=0;i<N;i++){ visited[i]=false; } for(ll i=0;i<starting.size();i++){ maxi=maxrecord[i]; dfs2(starting[i],0); paths.push_back(yes); yes.clear(); } ll ans=0; vector<ll>segments; for(ll i=0;i<paths.size();i++){ ans=max(ans,maxrecord[i].first); ll good=LLONG_MAX; ll sofar=0; for(ll j=0;j<paths[i].size();j++){ if(max(maxrecord[i].first-sofar,sofar)<good){ good=max(maxrecord[i].first-sofar,sofar); sofar+=mp[{paths[i][j],paths[i][j+1]}]; } else break; } segments.push_back(good); } ll d=segments.size(); sort(segments.begin(),segments.end()); ans=max(ans,segments[d-1]+segments[d-2]+L); ans=max(ans,segments[d-2]+segments[d-3]+2*L); return ans; }

Compilation message (stderr)

dreaming.cpp: In function 'void dfs(long long int, long long int)':
dreaming.cpp:14:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |         for(ll i=0;i<adjlist[node].size();i++){
      |                    ~^~~~~~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'void dfs2(long long int, long long int)':
dreaming.cpp:35:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |         for(ll i=0;i<adjlist[node].size();i++){
      |                    ~^~~~~~~~~~~~~~~~~~~~~
dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:69:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |     for(ll i=0;i<starting.size();i++){
      |                ~^~~~~~~~~~~~~~~~
dreaming.cpp:78:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     for(ll i=0;i<starting.size();i++){
      |                ~^~~~~~~~~~~~~~~~
dreaming.cpp:86:17: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for(ll i=0;i<paths.size();i++){
      |                ~^~~~~~~~~~~~~
dreaming.cpp:90:21: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |         for(ll j=0;j<paths[i].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...