제출 #1297202

#제출 시각아이디문제언어결과실행 시간메모리
1297202djawadmainMuseum (CEOI17_museum)C++20
100 / 100
141 ms1720 KiB
#include<iostream> #include<algorithm> #include<vector> using namespace std; #define ll long long #define ld long double #define pii pair<int, int> #define pli pair<ll, ll> #define RUN_LIKE_DJAWAD (ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0)); #define DECIMAL_OUTPUT cout << fixed << setprecision(9); #define pb push_back #define pf push_top #define ff first #define ss second #define maxn 10001 #define inf 200000000 vector<pii> g[maxn]; int E1[maxn], E2[maxn], H1[maxn], H2[maxn]; bool seen[maxn]; int dfs(int v, int pt){ seen[v] = true; E1[pt] = 0, E2[pt] = 0; int SZN = 1; for (auto [u, w]: g[v]) if (not seen[u]){ int szc = dfs(u, pt + SZN); for (int i = 0; i < SZN; i++) H1[i] = E1[pt + i], H2[i] = E2[pt + i]; for (int i = 0; i < szc; i++) H1[SZN + i] = inf, H2[SZN + i] = inf; for (int i = 0; i < SZN; i++) for (int j = 0; j < szc; j++){ H1[i + j + 1] = min({H1[i + j + 1], E1[pt + i] + E2[pt + SZN + j] + (w << 1), E2[pt + i] + E1[pt + SZN + j] + w}); H2[i + j + 1] = min(H2[i + j + 1], E2[pt + i] + E2[pt + SZN + j] + (w << 1)); } SZN += szc; for (int i = 0; i < SZN; i++) E1[pt + i] = H1[i], E2[pt + i] = H2[i]; } return SZN; } int n, k, s, ui, vi, ci; int main(){ RUN_LIKE_DJAWAD cin >> n >> k >> s; for (int i = 1; i < n; i++){ cin >> ui >> vi >> ci; g[ui].pb({vi, ci}); g[vi].pb({ui, ci}); } dfs(s, 0); cout << E1[k - 1] << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...