POJ题目1947 Rebuilding Roads(树形dp)
2015-07-24 13:35
555 查看
Rebuilding Roads
Description
The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1..N) after the terrible earthquake last May. The cows didn't have time to rebuild any extra roads, so now there is exactly one way to get from any given barn to any other
barn. Thus, the farm transportation system can be represented as a tree.
Farmer John wants to know how much damage another earthquake could do. He wants to know the minimum number of roads whose destruction would isolate a subtree of exactly P (1 <= P <= N) barns from the rest of the barns.
Input
* Line 1: Two integers, N and P
* Lines 2..N: N-1 lines, each with two integers I and J. Node I is node J's parent in the tree of roads.
Output
A single line containing the integer that is the minimum number of roads that need to be destroyed for a subtree of P nodes to be isolated.
Sample Input
Sample Output
Hint
[A subtree with nodes (1, 2, 3, 6, 7, 8) will become isolated if roads 1-4 and 1-5 are destroyed.]
Source
USACO 2002 February
题目大意:问一个数删掉最少条边变成一个只有n个结点的子树
ac代码
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 9957 | Accepted: 4537 |
The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1..N) after the terrible earthquake last May. The cows didn't have time to rebuild any extra roads, so now there is exactly one way to get from any given barn to any other
barn. Thus, the farm transportation system can be represented as a tree.
Farmer John wants to know how much damage another earthquake could do. He wants to know the minimum number of roads whose destruction would isolate a subtree of exactly P (1 <= P <= N) barns from the rest of the barns.
Input
* Line 1: Two integers, N and P
* Lines 2..N: N-1 lines, each with two integers I and J. Node I is node J's parent in the tree of roads.
Output
A single line containing the integer that is the minimum number of roads that need to be destroyed for a subtree of P nodes to be isolated.
Sample Input
11 6 1 2 1 3 1 4 1 5 2 6 2 7 2 8 4 9 4 10 4 11
Sample Output
2
Hint
[A subtree with nodes (1, 2, 3, 6, 7, 8) will become isolated if roads 1-4 and 1-5 are destroyed.]
Source
USACO 2002 February
题目大意:问一个数删掉最少条边变成一个只有n个结点的子树
ac代码
#include<stdio.h> #include<string.h> #define min(a,b) (a>b?b:a) #define INF 0xfffffff int dp[220][220]; int pre[220],head[220],vis[220],dig[220]; int n,p,cnt; struct s { int u,v,w,next; }edge[220*2]; void add(int u,int v) { edge[cnt].u=u; edge[cnt].v=v; edge[cnt].next=head[u]; head[u]=cnt++; } void tree_dp(int u) { int i,j,k; for(i=0;i<=p;i++) { dp[u][i]=INF; } dp[u][1]=0; for(i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v; tree_dp(v); for(k=p;k>=1;k--) { dp[u][k]=dp[u][k]+1; for(j=1;j<k;j++) { dp[u][k]=min(dp[u][k],dp[u][j]+dp[v][k-j]); } } } } int DP(int u) { tree_dp(u); int ans=dp[u][p]; int i; for(i=1;i<=n;i++) { ans=min(ans,dp[i][p]+1); // printf("%d\n",dp[i][1]); } return ans; } int main() { //int n,p; while(scanf("%d%d",&n,&p)!=EOF) { int i; memset(dig,0,sizeof(dig)); memset(head,-1,sizeof(head)); cnt=0; for(i=0;i<n-1;i++) { int a,b; scanf("%d%d",&a,&b); add(a,b); dig[b]++; } int root; for(i=1;i<=n;i++) { if(dig[i]==0) root=i; } printf("%d\n",DP(root)); } }
相关文章推荐
- 使用unordered_map编译报#error This file requires compiler and library support
- 关于HashMap根据Value获取Key
- 修正EasyUI的BUG——Form中存在FileBox时的数据加载错误
- PS快捷键大全
- javaGUI解决闪屏问题
- UICollectionView的简单使用
- IOS开发UI基础--数据刷新
- java GUI游戏界面问题 play,exit操作
- iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解 f
- POJ 2457--Part Acquisition 【spfa最短路 + STL路径输出】
- 如果你在iphone6plus下看到[UIScreen mainScreen].scale不是3.0
- Maven的Build过程
- [Java Web]EasyUI中Calendar预设时间的解决
- UITableView的简单使用
- IOS UILocalNotification 本地通知
- iOS 编程 利用UIScrollView 编写无缝循环显示图片
- 安卓使用merge标签和include优化UI布局
- uep开发——财务管理系统的总结
- 如何扩展EasyUI在页面中立即显示选中的本地图片
- Implement Queue using Stacks