Submission #164828

#TimeUsernameProblemLanguageResultExecution timeMemory
164828BertedDreaming (IOI13_dreaming)C++14
100 / 100
156 ms13544 KiB
#include "dreaming.h" #include <vector> #include <iostream> #include <queue> using namespace std; #define pii pair<int,int> #define fst first #define snd second #define vpi vector<pii> #define pub push_back int n,m,l,dp[100001][2]={},mn = 1e9,rs = 0; bool bt[100001]={}; priority_queue<int> pq; vector<vpi> adj; inline void dfs(int u,int p) { bt[u] = 1; for (auto v:adj[u]) { if (v.fst!=p) { dfs(v.fst,u); if (dp[v.fst][0] + v.snd > dp[u][0]) { dp[u][1] = dp[u][0]; dp[u][0] = dp[v.fst][0] + v.snd; } else if (dp[v.fst][0] + v.snd > dp[u][1]) { dp[u][1] = dp[v.fst][0] + v.snd; } } } } inline void dfs2(int u,int p,int mx) { mn = min(mn,max(mx,dp[u][0])); rs = max(rs,dp[u][0] + max(dp[u][1],mx)); for (auto v:adj[u]) { if (v.fst!=p) { bt[u] = 1; dfs2(v.fst,u,max(mx,(dp[u][0]==dp[v.fst][0] + v.snd)?dp[u][1]:dp[u][0]) + v.snd); } } } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { n = N; m = M; l = L; for (int i=0;i<n;i++) {adj.pub(vpi());} for (int i=0;i<m;i++) { adj[A[i]].pub({B[i],T[i]}); adj[B[i]].pub({A[i],T[i]}); } for (int i=0;i<n;i++) { if (!bt[i]) { dfs(i,-1); dfs2(i,-1,0); //cout<<i<<" "<<mn<<"\n"; pq.push(mn); mn = 1e9; } } if (pq.size()>2) { int a = pq.top();pq.pop(); int b = pq.top();pq.pop(); int c = pq.top();pq.pop(); rs = max(rs,max(a + b + l,b + c + 2*l)); } else if (pq.size()>1) { int a = pq.top();pq.pop(); int b = pq.top();pq.pop(); rs = max(rs,a + b + l); } return rs; }
#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...