1 条题解
-
0
C++ :
/*==================== AUTHOR:MOSHANGYIN TYPE:TREE DP TITLE:REBUILD ROADS ====================*/ #include <iostream> #include <cstdio> #include <cstring> #include <vector> using namespace std; vector<int> g[155]; int n,p,x,y,id[155]={0}; int f[155][155]={0}; inline int in() { char c=getchar(); int x=0; while(c<'0'||c>'9') { c=getchar(); } for(;c>='0'&&c<='9';c=getchar()) { x=x*10+c-'0'; } return x; } void dp(int x) { f[x][1]=0; for(int i=0;i<g[x].size();i++) { dp(g[x][i]); for(int j=p;j>=1;j--) { f[x][j]++; for(int k=1;k<j;k++) { f[x][j]=min(f[x][j],f[g[x][i]][j-k]+f[x][k]); } } } } int main() { n=in(),p=in(); for(int i=1;i<=n;i++) { for(int j=1;j<=p;j++) { f[i][j]=100001; } } for(int i=1;i<n;i++) { x=in(),y=in(); id[y]++; g[x].push_back(y); } for(int i=1;i<=n;i++) { if(id[i]==0) { dp(i); int ans=f[i][p]; for(int i=1;i<=n;i++) { ans=min(ans,f[i][p]+1); } printf("%d\n",ans); break; } } return 0; }
- 1
信息
- ID
- 1233
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者