POJ 1947 Rebuilding Roads(树状DP)
2012-10-31 21:28
357 查看
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int inf = 1000000; #define N 151 int d ; int cld , bro ; bool fa ; int n, p; void dfs(int s){ for (int i = 0; i <= p; i++)d[s][i] = inf; d[s][1] = 0; int k = cld[s]; while (k){ dfs(k); for (int i = p; i >= 0; i--){ int tmp = d[s][i] + 1; for (int j = 0; j <= i; j++){ tmp = min(tmp, d[k][j] + d[s][i - j]); } d[s][i] = tmp; } k = bro[k]; } } int main(){ freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); scanf("%d %d", &n, &p); int a, b; for (int i = 1; i <= n; i++)cld[i] = 0; memset(fa, 0, sizeof(fa)); for (int i = 0; i < n - 1; i++){ scanf("%d %d", &a, &b); bro[b] = cld[a]; cld[a] = b; fa[b] = true; } int root; for (int i = 1; i <= n; i++) if (fa[i] == 0)root = i; dfs(root); int ans = d[root][p]; for (int i = 1; i <= n; i++){ if (d[i][p] < ans)ans = d[i][p] + 1; } printf("%d\n", ans); return 0; }
相关文章推荐
- POJ_1947_Rebuilding Roads_树状DP
- POJ 1947 Rebuilding Roads【树状DP】
- poj 1947(树形dp)
- poj 1947 Rebuilding Roads 树形dp
- POJ 1947 Rebuilding Roads(树DP)
- POJ 1947 Rebuilding Roads(树形DP)
- poj 1947(树形dp+背包问题)
- poj 1655 Balancing Act 树状dp
- [poj 1947] Rebuilding Roads 树形DP
- poj 1947 Rebuilding Roads(树形dp)
- POJ - 1947(树形dp)
- 长吐一口气~树形DP汇总(POJ 2486 3659 2342 1947 1463 hdu 2412 )
- POJ 1947 Rebuilding Roads (树形dp 经典题)
- ACM: 动态规划题 poj 2057 树状DP
- poj 1947 Rebuilding Roads 树状DP + 分组背包
- POJ 3107 Godfather 树状DP
- 【树形DP】【多叉转二叉】【poj 1947】Rebuilding Roads
- POJ 1947 Rebuilding Roads 树形DP
- poj 1947 Rebuilding Roads 树形dp
- poj 1655 树状dp