Submission #58311

#TimeUsernameProblemLanguageResultExecution timeMemory
58311AutoratchDreaming (IOI13_dreaming)C++14
100 / 100
122 ms8736 KiB
#include <bits/stdc++.h> #include "dreaming.h" using namespace std; vector<vector<pair<int,int> > > adj; vector<bool> visited; vector<int> cmp,s,e; queue<pair<int,pair<int,int> > > q; pair<int,int> solve(int x,int n) { int sz = 0; q.push({0,{x,x}}); int mx = 0,st = x,en = x; while(!q.empty()) { int w = q.front().first,p = q.front().second.first,pr = q.front().second.second; q.pop(); visited[p] = true; if(w>mx){ mx = w; st = p; } for(int i = 0;i < adj[p].size();i++) if(adj[p][i].second!=pr) q.push({adj[p][i].first+w,{adj[p][i].second,p}}); } q.push({0,{st,st}}); mx = 0; int rad = INT_MAX,dia; while(!q.empty()) { int w = q.front().first,p = q.front().second.first,pr = q.front().second.second; q.pop(); s[p] = w; if(w>mx){ mx = w; en = p; } for(int i = 0;i < adj[p].size();i++) if(adj[p][i].second!=pr) q.push({adj[p][i].first+w,{adj[p][i].second,p}}); } q.push({0,{en,en}}); while(!q.empty()) { int w = q.front().first,p = q.front().second.first,pr = q.front().second.second; q.pop(); e[p] = w; for(int i = 0;i < adj[p].size();i++) if(adj[p][i].second!=pr) q.push({adj[p][i].first+w,{adj[p][i].second,p}}); } dia = mx; q.push({0,{st,st}}); while(!q.empty()) { int w = q.front().first,p = q.front().second.first,pr = q.front().second.second; q.pop(); rad = min(rad,max(s[p],e[p])); for(int i = 0;i < adj[p].size();i++) if(adj[p][i].second!=pr) q.push({adj[p][i].first+w,{adj[p][i].second,p}}); } return {rad,dia}; } int travelTime(int n,int m,int l,int a[],int b[],int t[]) { s.resize(n); e.resize(n); adj.resize(n); visited.resize(n); for(int i = 0;i < m;i++) { adj[a[i]].push_back({t[i],b[i]}); adj[b[i]].push_back({t[i],a[i]}); } int ans = 0; for(int i = 0;i < n;i++) { if(visited[i]) continue; pair<int,int> tmp = solve(i,n); cmp.push_back(tmp.first); ans = max(ans,tmp.second); } sort(cmp.begin(),cmp.end()); reverse(cmp.begin(),cmp.end()); if(cmp.size()==1) ans = max(ans,cmp[0]); else if(cmp.size()==2) ans = max(ans,cmp[0]+cmp[1]+l); else ans = max(ans,max(cmp[0]+cmp[1]+l,cmp[1]+cmp[2]+l+l)); return ans; } // //int main() //{ // int n,m,l; // cin >> n >> m >> l; // int a[m],b[m],t[m]; // for(int i = 0;i < m;i++) cin >> a[i] >> b[i] >> t[i]; // cout << travelTime(n,m,l,a,b,t); //}

Compilation message (stderr)

dreaming.cpp: In function 'std::pair<int, int> solve(int, int)':
dreaming.cpp:21:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0;i < adj[p].size();i++) if(adj[p][i].second!=pr) q.push({adj[p][i].first+w,{adj[p][i].second,p}});
                       ~~^~~~~~~~~~~~~~~
dreaming.cpp:32:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0;i < adj[p].size();i++) if(adj[p][i].second!=pr) q.push({adj[p][i].first+w,{adj[p][i].second,p}});
                       ~~^~~~~~~~~~~~~~~
dreaming.cpp:40:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0;i < adj[p].size();i++) if(adj[p][i].second!=pr) q.push({adj[p][i].first+w,{adj[p][i].second,p}});
                       ~~^~~~~~~~~~~~~~~
dreaming.cpp:49:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0;i < adj[p].size();i++) if(adj[p][i].second!=pr) q.push({adj[p][i].first+w,{adj[p][i].second,p}});
                       ~~^~~~~~~~~~~~~~~
dreaming.cpp:12:9: warning: unused variable 'sz' [-Wunused-variable]
     int sz = 0;
         ^~
#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...