Submission #337329

#TimeUsernameProblemLanguageResultExecution timeMemory
337329bigDuckDreaming (IOI13_dreaming)C++14
100 / 100
136 ms24812 KiB
#include "dreaming.h" #include<bits/stdc++.h> using namespace std; #define INIT ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define mp make_pair #define pb push_back #define ft first #define sc second #define ll long long #define pii pair<int, int> #define count_bits __builtin_popcount #define int ll vector<pii> g[100010]; int dp[100010][2]; pii dir[100010][2]; bool v[100010]; int h[100010], c; int d[100010]; int dfs(int s){ v[s]=true; for(pii e:g[s]){ int l=e.sc, u=e.ft; if(!v[u]){ dfs(u); if( (dp[u][0]+l)>dp[s][0]){ dp[s][1]=dp[s][0]; dp[s][0]=dp[u][0]+l; dir[s][1]=dir[s][0]; dir[s][0]={u, l}; } else{ if( (dp[u][0]+l)>dp[s][1] ){ dp[s][1]=dp[u][0]+l; dir[s][1]={u, l}; } } } } return dp[s][0]; } int dfs2(int s, int up){ int ac=dp[s][0]; if(ac<=up ){ return ac; } int l=dir[s][0].sc; int r=dfs2(dir[s][0].ft, max(up+l, dp[s][1]+l) ); if( ( max(r , max(up+l, dp[s][1]+l) )<max(up, dp[s][0]) ) ){ return max(r, max(up+l, dp[s][1]+l)); } else{ return max(up, dp[s][0]); } } bool v2[100010]; pii diam(int s){ v2[s]=true; pii r={0, s}; for(pii e:g[s]){ int u=e.ft, l=e.sc; if(!v2[u]){ pii p=diam(u); p.ft+=l; if(p.ft>=r.ft){ r=p; } } } v2[s]=false; return r; } int32_t travelTime(int32_t n, int32_t m, int32_t l, int32_t a[], int32_t b[], int32_t t[]){ for(int i=0;i<m; i++){ int u=a[i], v=b[i]; g[u].pb({v, t[i]}); g[v].pb({u, t[i]}); } int res=0; for(int i=0; i<n; i++){ if(!v[i]){ c++; dfs(i); int r=dfs2(i, dp[i][1]); pii p=diam(i); p=diam(p.sc); d[c]=p.ft; h[c]=r; res=max(res, d[c]); } } sort(h+1, h+1+c); if(c>=2){ res=max(res, l+h[c]+h[c-1]); } if(c>2){ res=max(res, l*2+h[c-1]+h[c-2]); } return res; }
#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...