Submission #1205353

#TimeUsernameProblemLanguageResultExecution timeMemory
1205353phamtienhoangMuseum (CEOI17_museum)C++17
0 / 100
484 ms1114112 KiB
#include <iostream> #include <vector> #include <map> #include <string> #include <algorithm> #include <cassert> #include <cstring> using namespace std; long long INF = 1e18 + 7LL; const int N = 10005; int n , k , root; vector<pair<int , long long > > adj[N]; long long f[N][N][2]; int sz[N]; void dfs(int u , int father){ sz[u] = 1; f[u][1][0] = f[u][1][1] = 0LL; for(int i = 0 ; i < adj[u].size() ; i++){ int v = adj[u][i].first; long long cost = adj[u][i].second; if(v == father){ continue; } dfs(v, u); long long g[N][2]; memset(g , 0x3f, sizeof(g)); for(int i = sz[u] ; i >= 0 ; i-- ){ for(int j = sz[v] ; j >= 1 ; j--){ g[i + j][0] = min(g[i + j][0] , f[u][i][1] + f[v][j][0] + cost); g[i + j][0] = min(g[i + j][0] , f[u][i][0] + f[v][j][1] + 2LL * cost); g[i + j][1] = min(g[i + j][1] , f[u][i][1] + f[v][j][1] + 2LL * cost); } } sz[u] += sz[v]; for(int i = 1; i <= sz[u] ; i++){ f[u][i][0] = min(f[u][i][0] , g[i][0]); f[u][i][1] = min(f[u][i][1] , g[i][1]); } } } int main(){ cin >> n >> k >> root; for(int i = 1; i < n ; i++){ int u , v ; long long cost; cin >> u >> v >> cost; adj[u].push_back(make_pair(v, cost)); adj[v].push_back(make_pair(u , cost)); } memset(f , 0x3f , sizeof(f)); dfs(root, -1); cout << f[root][k][0]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...