Submission #906249

#TimeUsernameProblemLanguageResultExecution timeMemory
906249MathiasDreaming (IOI13_dreaming)C++14
100 / 100
66 ms20308 KiB
#include <bits/stdc++.h> #include "dreaming.h" using namespace std; const int INF = 1<<31-1; const int MAXN = 1e5+7; int xd[MAXN][3]; int ojc[MAXN]; int sum[MAXN]; bool visited[MAXN][3]; vector<int> v; vector<pair<int,int> > g[MAXN]; int a,b,c,d,m,w,d1,curr,r; void DFS1(int x,int f,int k){ visited[x][k]=1; for(auto s:g[x]){ if(s.first==f) continue; xd[s.first][k]=max(xd[s.first][k], xd[x][k]+s.second); if(xd[s.first][k]>m){ m=xd[s.first][k]; d=s.first; } DFS1(s.first,x,k); } } void DFS2(int x,int f,int k){ visited[x][k]=1; ojc[x]=f; for(auto s:g[x]){ if(s.first==f) continue; xd[s.first][k]=max(xd[s.first][k], xd[x][k]+s.second); sum[s.first]=sum[x]+s.second; if(xd[s.first][k]>m){ m=xd[s.first][k]; d1=s.first; } DFS2(s.first,x,k); } } int p=0; int travelTime(int N,int M,int L,int A[],int B[],int T[]){ for(int i=0;i<M;i++){ g[A[i]].push_back({B[i], T[i]}); g[B[i]].push_back({A[i], T[i]}); } for(int i=0;i<N;i++){ if(visited[i][0]==0){ m=0; d=i , d1=i; DFS1(i,MAXN-1,0); m=0; DFS2(d,MAXN-1,1); r=INF; curr=d1; p=max(p,sum[curr]); while(curr!=MAXN-1){ if(max(sum[d1]-sum[curr], sum[curr])<r){ r=max(sum[d1]-sum[curr], sum[curr]); w=curr; } curr=ojc[curr]; } v.push_back(r); } } if(v.size()==1){ return p; } else if(v.size()==2){ a=v[0]; b=v[1]; //cout<<a<<' '<<b<<' '<<L<<'\n'; return max(a+b+L,p); } else{ sort(v.begin(),v.end()); reverse(v.begin(), v.end()); a=v[0]; b=v[1]; c=v[2]; //cout<<a<<' '<<b<<' '<<c<<'\n'; return max({a+b+L,b+c+2*L,p}); } }/* int main(){ int A[100], B[100], T[100]; int n,m,l; cin>>n>>m>>l; for(int i=0;i<m;i++) cin>>A[i]>>B[i]>>T[i]; cout<<travelTime(n,m,l,A,B,T)<<'\n'; } */

Compilation message (stderr)

dreaming.cpp:4:22: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
    4 | const int INF = 1<<31-1;
      |                    ~~^~
#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...