2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int N=200; int f[N][N], d[N], n, p; vector<int> G[N]; void dfs(int x, int fa){ f[x][1]=d[x]; for(int y: G[x]) if(y!=fa){ dfs(y, x); for(int i=p; i>=1; i--){ for(int j=1; j<i; j++){ f[x][i]=min(f[x][i], f[x][j]+f[y][i-j]-2); } } } } int main(){ scanf("%d%d", &n, &p); memset(d, 0, sizeof(d)); for(int i=1; i<n; i++){ int x, y; scanf("%d%d", &x, &y); G[x].push_back(y); G[y].push_back(x); d[x]++; d[y]++; } memset(f, 0x3f, sizeof(f)); dfs(1, 0); int ans=0x3f3f3f3f; for(int i=1; i<=n; i++) ans=min(ans, f[i][p]); printf("%d\n", ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=200; int f[N][N], d[N], n, p; vector<int> G[N]; void dfs(int x, int fa){ f[x][1]=d[x]; for(int y: G[x]) if(y!=fa){ dfs(y, x); for(int i=p; i>=1; i--){ for(int j=1; j<i; j++){ f[x][i]=min(f[x][i], f[x][j]+f[y][i-j]-2); } } } } int main(){ scanf("%d%d", &n, &p); memset(d, 0, sizeof(d)); for(int i=1; i<n; i++){ int x, y; scanf("%d%d", &x, &y); G[x].push_back(y); G[y].push_back(x); d[x]++; d[y]++; } memset(f, 0x3f, sizeof(f)); dfs(1, 0); int ans=0x3f3f3f3f; for(int i=1; i<=n; i++) ans=min(ans, f[i][p]); printf("%d\n", ans); return 0; }
- 1
信息
- ID
- 2316
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 9
- 标签
- 递交数
- 12
- 已通过
- 7
- 上传者