一場可怕的**後,人們用n個牲口棚(1≤n≤150,編號1..n)重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次**會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p(1≤p≤n)個牲口棚的子樹和剩餘的牲口棚分離,john想知道這些道路的最小數目。
第1行:2個整數,n和p
第2..n行:每行2個整數i和j,表示節點i是節點j的父節點。
單獨一行,包含一旦被破壞將分離出恰含p個節點的子樹的道路的最小數目。
11 6
1 21 3
1 41 5
2 62 7
2 84 9
4 10
4 11
2
說明
如果道路1-4和1-5被破壞,含有節點(1,2,3,6,7,8)的子樹將被分離出來
dp[i][j]表示以i為根的子樹中,分離出大小為j的子樹的最小花費(包括節點i)
#include#include#include#includeconst int maxn = 421;
inline int read()
while (c<='9'&&c>='0')
return x*f;
}struct nodeedge[maxn*2];int du[maxn],head[maxn],num=0;
inline void add_edge(int u,int v)
int n,k;
int dp[maxn][maxn];
int ans=0x7fffffff;
void dfs(int u,int f)
ans=std::min(ans,dp[u][k]);
}int main()
dfs(1,0);
printf("%d\n",ans);
return 0;
}
luogu P1272 重建道路
很好的一道樹上dp 我會告訴你我想那個 2 想了乙個下午嗎?題面 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會...
luogu P1272 重建道路 樹形DP
luogu p1272 重建道路 x n y n z n 題目描述 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1.n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 ...
P1272 重建道路
p1272 重建道路 題意 有一棵n個點的樹,求刪掉最少的邊數,使得其中p個點的子樹和另一部分分離 dp i j 表示編號為i的點周圍組成j個點的樹最少要刪的邊數 初始狀態 dp i 1 連線這個點的邊數 每個點都是點數為1的樹 然後去考慮連線兩個點,使子樹的點數增多。有兩個點數都是1的樹dp i ...