Submission #29724

#TimeUsernameProblemLanguageResultExecution timeMemory
29724aybalaDreaming (IOI13_dreaming)C++11
14 / 100
67 ms14332 KiB
#include "dreaming.h" #include<bits/stdc++.h> #define fori(a,b,c) for(int a=b; a<c; a++) #define ford(a,b,c) for(int a=b; a>=c; a++) #define pb push_back #define pq priority_queue #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define ll long long using namespace std; vector< pii >v[100004]; ll dis[100004]; ll disr[100004]; vector< int >el[2]; bool vis[100004]; ll ans[2][2]; void dfs(int u, int pre, int gr){ int s=v[u].size(); vis[u]=1; el[gr].pb(u); fori(i,0,s){ if(pre!=v[u][i].fi){ dis[v[u][i].fi]+=dis[u]+v[u][i].se; dfs(v[u][i].fi,u,gr); } } } int n; int travelTime(int N, int M, int L, int A[], int B[], int T[]) { n=N; int max1=0; int max2=0; fori(i,0,M){ v[A[i]].pb(mp(B[i],T[i])); v[B[i]].pb(mp(A[i],T[i])); if(T[i]>=max1){ max2=max1; max1=T[i]; } else if(T[i]>=max2){ max2=T[i]; } } fori(i,0,n){ if(v[i].size()>=2){ if(M==N-2){ int gr=0; fori(i,0,n){ if(v[i].size()==1 && !vis[i]){ dfs(i,i,gr); int s=el[gr].size(); int uu=el[gr][s-1]; fori(j,0,s){ disr[el[gr][j]]=dis[uu]-dis[el[gr][j]]; if(j==0){ ans[gr][0]=el[gr][j]; ans[gr][1]=max(disr[el[gr][j]],dis[el[gr][j]]); } else if(ans[gr][1]>max(disr[el[gr][j]],dis[el[gr][j]])){ ans[gr][1]=max(disr[el[gr][j]],dis[el[gr][j]]); ans[gr][0]=el[gr][j]; } } gr++; } } ll res=0; fori(i,0,2){ int u = el[i][0]; res=max(res,disr[u]); res=max(res,dis[ans[i][0]]+L+ans[(i+1)%2][1]); u = el[i][el[i].size()-1]; res=max(res,dis[u]); res=max(res,disr[ans[i][0]]+L+ans[(i+1)%2][1]); } return res; } } } return max1+max2+2*L; }
#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...