3 条题解
-
1
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <map> #include <cstring> #include <iomanip> const int N = 1e3 + 10; using namespace std; const int INF = 0x3f3f3f3f; using namespace std; struct node { int data; int to; }; int n , q , u , v , w ; int dp[N][N] , son[N]; vector<node> vc[N]; void dfs (int u , int fa) { son[u] = 1; dp[u][1] = 0; for(int i = 0 ; i < vc[u].size() ; i++) { int v = vc[u][i].to; if(v ==fa)continue; dfs(v , u); son[u] += son[v]; for(int j = son[u] ; j >= 1 ; j--) { for(int k = 1 ; k <= min( j - 1 , son[v]) ; k++) { dp[u][j] = max(dp[u][j] , dp[u][j-k] + dp[v][k] + vc[u][i].data); } } } } int main() { cin >> n >> q ; memset(dp , -INF , sizeof(dp)); for(int i = 1 ; i < n ; i++) { cin >> u >> v >> w ; vc[u].push_back((node){w , v}); vc[v].push_back((node){w , u}); } dfs( 1 , 0 ); cout << dp[1][q + 1]; return 0; }
信息
- ID
- 472
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 123
- 已通过
- 41
- 上传者