冴月麟和魏瀟承是好朋友。
冴月麟為了守護幻想鄉,而製造了幻想鄉的倒影,將真實的幻想鄉封印了。任何人都無法進入真實的幻想鄉了,但是她給前來救她的魏瀟承留了乙個線索。
她設定了一棵樹(有根)。樹的每一條邊上具有割掉該邊的代價。
魏瀟承需要計算出割開這棵樹的最小代價,這就是冴月麟和魏瀟承約定的小秘密。
幫幫魏瀟承吧。
注:所謂割開一棵有根樹,就是刪除若干條邊,使得任何任何葉子節點和根節點不連通。
輸入格式:
輸入第一行兩個整數n,s表示樹的節點個數和根。
接下來n-1行每行三個整數a、b、c,表示a、b之間有一條代價為c的邊。
輸出格式:
輸出包含一行,乙個整數,表示所求最小代價。
好坑啊。。。空間卡的好嚴,用定長陣列存邊調了半天才卡過去
這道題很多人用的費用流,但我不會
很多人用的鄰接表,但我比較懶
這道題其實我們可以這樣想:
因為這是一棵樹,所以我們可以想到樹形dp
我們從根節點往下走,一直到葉子節點
因為要求的是割掉所有子結點,那麼我們有兩種選擇
要麼割掉這個子節點上連的邊
要麼割掉某個與他祖先連的邊
於是,我們的dp陣列表示的就是在i點時,割掉與他所轄的所有的葉子節點的最小代價
怎麼轉移呢?
我們知道從乙個祖先點往下,如果想要割掉他的所有子樹所轄的所有子節點
要麼割掉他與那個子樹相連那條邊
要麼我們割掉與子樹相連的所有非返祖邊
這樣就是乙個dp
每次枚舉子樹
要麼割掉邊,要麼割掉子樹
取最小代價
一層層遞迴向上
根節點就是答案
#include#include#define rii register int i
using
namespace
std;
struct
bianx[
100001
];long
long dp[100001
],n,root;
void dplast(int wz,int
fa)
for(rii=1;i<=x[wz].sl;i++)
}}int
main()
for(rii=1;i<=n;i++)
}dplast(root,0);
cout
<}
SAC E 1 一道難題 Tree
冴月麟和魏瀟承是好朋友。冴月麟為了守護幻想鄉,而製造了幻想鄉的倒影,將真實的幻想鄉封印了。任何人都無法進入真實的幻想鄉了,但是她給前來救她的魏瀟承留了乙個線索。她設定了一棵樹 有根 樹的每一條邊上具有割掉該邊的代價。魏瀟承需要計算出割開這棵樹的最小代價,這就是冴月麟和魏瀟承約定的小秘密。幫幫魏瀟承吧...
P3931 SAC E 1 一道難題 Tree
題目描述 冴月麟為了守護幻想鄉,而製造了幻想鄉的倒影,將真實的幻想鄉封印了。任何人都無法進入真實的幻想鄉了,但是她給前來救她的魏瀟承留了乙個線索。她設定了一棵樹 有根 樹的每一條邊上具有割掉該邊的代價。魏瀟承需要計算出割開這棵樹的最小代價,這就是冴月麟和魏瀟承約定的小秘密。幫幫魏瀟承吧。注 所謂割開...
SAC E 1 一道中檔題 Factorial
sol君 爐石主播 和sol菌 完美資訊教室講師 是好朋友。sol君很喜歡階乘。而sol菌很喜歡研究進製。這一天,sol君跟sol菌炫技,隨口算出了n的階乘。sol菌表示不服,立刻就要算這個數在k進製表示下末尾0的個數。但是sol菌太菜了於是請你幫忙。輸入格式 每組輸入僅包含一行 兩個整數n,k。輸...