제출 #1313747

#제출 시각아이디문제언어결과실행 시간메모리
1313747husseinjuanda꿈 (IOI13_dreaming)C++20
100 / 100
50 ms22208 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; #define ll long long vector<ll> dp; vector<vector<pair<ll, ll>>> g; vector<ll> d; vector<ll> h; void dfs(int k, int p){ d[k] = 1; for(int y = 0; y < g[k].size(); y++){ if(g[k][y].first == p) continue; dfs(g[k][y].first, k); dp[k] = max(dp[k], dp[g[k][y].first]+g[k][y].second); } } ll m = 2e18; ll mmx = 0; void reroot(ll k, ll p, ll up){ ll mx = 0; ll mx1 = 0; for(int y = 0; y < g[k].size(); y++){ if(g[k][y].first == p) continue; if(mx < dp[g[k][y].first] + g[k][y].second){ mx1 = mx; mx = dp[g[k][y].first] + g[k][y].second; }else{ mx1 = max(mx1, dp[g[k][y].first] + g[k][y].second); } } h[k] = max(dp[k], up); for(int y = 0; y < g[k].size(); y++){ if(g[k][y].first == p) continue; if(mx == dp[g[k][y].first]+g[k][y].second){ reroot(g[k][y].first, k, max(mx1, up)+g[k][y].second); }else{ reroot(g[k][y].first, k, max(mx, up)+g[k][y].second); } } mmx = max(mmx, h[k]); m = min(m, h[k]); } int travelTime(int N, int M, int L, int A[], int B[], int T[]) { g.clear(); g.resize(N); 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]}); } mmx = 0; d.clear(); d.resize(N); h.clear(); h.resize(N); dp.clear(); dp.resize(N); vector<ll> s; for(int i = 0; i < N; i++){ if(d[i] == 1) continue; m = 2e18; dfs(i, -1); reroot(i, -1, 0); s.push_back(m); // cout << m << "\n"; } sort(s.rbegin(), s.rend()); if(s.size() >= 2){ mmx = max(mmx, s[0] + s[1] + L); } if(s.size() >= 3){ mmx = max(mmx, s[1] + s[2] + 2*L); } // cout << mn << " " << mmx << endl; return mmx; }
#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...