BSOJ: 1625 【USACO 2002 February Green】重建道路
来源:互联网 发布:隐藏式床设计 知乎 编辑:程序博客网 时间:2024/05/13 16:28
Description
一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场。由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟一的。因此,牧场运输系统可以被构建成一棵树。John想要知道另一次地震会造成多严重的破坏。有些道路一旦被毁坏,就会使一棵含有P(1≤P≤N)个牲口棚的子树和剩余的牲口棚分离,John想知道这些道路的最小数目。
Input
第1行:2个整数,N和P
第2..N行:每行2个整数I和J,表示节点I是节点J的父节点。
Output
单独一行,包含一旦被破坏将分离出恰含P个节点的子树的道路的最小数目。
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
题目有很多翻译的版本,
这个翻译不是很好理解。
具体来说,
就是在一棵树上,
断掉一些边,
使分离出的子树至少有一个节点数为P。
怎么办呢?
很自然想到树形DP。
设
是不是很长?先慢慢看懂。
然后状态转移方程为:
初始化
然后有一个细节要注意:
在子树的信息计算出来后:
倒着循环
更多细节请仔细品味代码:
#include<cstdio>#include<iostream>#include<cmath>#include<cstdlib>#include<ctime>#include<cstring>#include<algorithm>#include<queue>#include<map>using namespace std;struct node { int to; int next;}w[2000];int tot[2000];int h[2000];int F[2000][2000];int cnt=1;int n,m;void AddEdge(int x,int y){ cnt++; w[cnt].to=y; w[cnt].next=h[x]; h[x]=cnt;}int Dfs(int v,int fa){ F[v][1]=tot[v]; if(v!=1)F[v][1]++; for(int i=2;i<=m;i++)F[v][i]=0x7ffffff; for(int i=h[v];i;i=w[i].next){ int y=w[i].to; if(y!=fa){ Dfs(y,v); for(int j=m;j>1;j--){ for(int k=1;k<j;k++){ F[v][j]=min(F[v][j],F[y][k]+F[v][j-k]-2); } } } }}int main(){ scanf("%d%d",&n,&m); int x,y; for(int i=2;i<=n;i++)tot[i]=-1; for(int i=1;i<n;i++){ scanf("%d%d",&x,&y); tot[x]++; tot[y]++; AddEdge(x,y); AddEdge(y,x); } Dfs(1,0); int Ans=0x7fffffff; for(int i=1;i<=n;i++){ Ans=min(Ans,F[i][m]); } cout<<Ans; return 0;}
2 0
- BSOJ: 1625 【USACO 2002 February Green】重建道路
- Bsoj: 3696 -- 【USACO 2012 February Gold】附近的奶牛
- USACO 2002 February
- 树状动规 USACO Feb 2002 Rebuilding Roads 重建道路
- 道路重建
- 重建道路
- 道路重建
- 【USACO 2002 February】BUY LOW,BUY LOWER 低价购买
- 【USACO 2013 February Gold】出租车
- USACO 2014 February Contest, Silver
- USACO 2017 February Contest Silver
- BSOJ 4208 -- 【USACO 2013 Jan】奶牛队列
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 洛谷 P1272 重建道路
- 【图论】[luoguP3905]道路重建
- (Java)LeetCode-16. 3Sum Closest
- php核心知识点
- Oracle中的SQL分页查询原理和方法详解
- FPGA笔记(四)
- Light oj-1100 - Again Array Queries,又是这个题,上次那个题用的线段树,这题差点就陷坑里了,简单的抽屉原理加暴力就可以了,真是坑~~
- BSOJ: 1625 【USACO 2002 February Green】重建道路
- 【面试】【MySQL常见问题总结】【02】
- Android产品研发(一)-->实用开发规范
- [权值线段树套kd树 替罪羊式重构] BZOJ 4605 崂山白花蛇草水
- python通过配置文件共享全局变量
- Liux入门:简单的程序编写(进度条)
- 1040. 有几个PAT(25)
- oracle的启动和关闭
- B/S之CSS简介