Submission #167520

#TimeUsernameProblemLanguageResultExecution timeMemory
167520DavidDamianDreaming (IOI13_dreaming)C++11
14 / 100
87 ms12956 KiB
#include "dreaming.h" #include<vector> #include<queue> #include<algorithm> #include<iostream> using namespace std; bool byGreater(int a,int b) { return a>b; } struct edge { int from,to; int w; }; vector<edge> adjList[100005]; int Far[100005]; //Stores the minimum longest distance for each tree int color[100005]; int d[2][100005]; queue<int> Q; int bfs(int s,int op,int c) { color[s]=c; d[op][s]=0; Q.push(s); int farthest_node; int maximum=0; while(Q.size()){ int u=Q.front();Q.pop(); for(edge e: adjList[u]){ int v=e.to; if(color[v]!=c){ color[v]=c; d[op][v]=d[op][u]+e.w; if(d[op][v]>maximum){ maximum=d[op][v]; farthest_node=v; } Q.push(v); } } } return farthest_node; } int getOptimumDistance(int s,int c) { color[s]=c; int minimumD=1000000000; Q.push(s); while(Q.size()){ int u=Q.front();Q.pop(); if(max(d[0][u],d[1][u])<minimumD){ minimumD=max(d[0][u],d[1][u]); } for(edge e: adjList[u]){ int v=e.to; if(color[v]!=c){ color[v]=c; Q.push(v); } } } return minimumD; } int far[5]; int travelTime(int N, int M, int L, int A[], int B[], int T[]) { for(int i=0;i<M;i++){ edge e={A[i],B[i],T[i]}; adjList[e.from].push_back(e); swap(e.from,e.to); adjList[e.from].push_back(e); } int answer=0; int max_diameter=0; int c=1; int trees=0; for(int u=0;u<N;u++){ if(color[u]!=0) continue; int a=bfs(u,1,c++); int b=bfs(a,0,c++); bfs(b,1,c++); max_diameter=max(max_diameter,d[1][a]); Far[trees++]=getOptimumDistance(u,c++); } for(int i=0;i<trees;i++){ if(Far[i]>far[0] || Far[i]>far[1] || Far[i]>far[2]){ far[3]=Far[i]; sort(far,far+4,byGreater); } } //cout<<far[0]<<" "<<far[1]<<" "<<far[2]<<endl; if(trees==1){ answer=max_diameter; } else if(trees==2){ answer=max(max_diameter,far[0]+L+far[1]); //Path joining yourself with another tree } else{ answer=max(max_diameter, max(far[0]+L+far[1],far[1]+L+L+far[2])); //Path joining yourself with another tree //and joining other two trees whose path passes for you } return answer; }

Compilation message (stderr)

dreaming.cpp: In function 'int bfs(int, int, int)':
dreaming.cpp:43:12: warning: 'farthest_node' may be used uninitialized in this function [-Wmaybe-uninitialized]
     return farthest_node;
            ^~~~~~~~~~~~~
#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...