NOI2002 貪吃的九頭龍

2021-08-21 06:54:40 字數 1983 閱讀 5477

description

傳說中的九頭龍是一種特別貪吃的動物。雖然名字叫「九頭龍」,但這只是說它出生的時候有九個頭,而在成長的過程中,它有時會長出很多的新頭,頭的總數會遠大於九,當然也會有舊頭因衰老而自己脫落。

有一天,有m個腦袋的九頭龍看到一棵長有n個果子的果樹,喜出望外,恨不得一口把它全部吃掉。可是必須照顧到每個頭,因此它需要把n個果子分成m組,每組至少有乙個果子,讓每個頭吃一組。

這m個腦袋中有乙個最大,稱為「大頭」,是眾頭之首,它要吃掉恰好k個果子,而且k個果子中理所當然地應該包括唯一的乙個最大的果子。果子由n-1根樹枝連線起來,由於果樹是乙個整體,因此可以從任意乙個果子出發沿著樹枝「走到」任何乙個其他的果子。

對於每段樹枝,如果它所連線的兩個果子需要由不同的頭來吃掉,那麼兩個頭會共同把樹枝弄斷而把果子分開;如果這兩個果子是由同乙個頭來吃掉,那麼這個頭會懶得把它弄斷而直接把果子連同樹枝一起吃掉。當然,吃樹枝並不是很舒服的,因此每段樹枝都有乙個吃下去的「難受值」,而九頭龍的難受值就是所有頭吃掉的樹枝的「難受值」之和。

九頭龍希望它的「難受值」盡量小,你能幫它算算嗎?

例如圖1所示的例子中,果樹包含8個果子,7段樹枝,各段樹枝的「難受值」標記在了樹枝的旁邊。九頭龍有兩個腦袋,大頭需要吃掉4個果子,其中必須包含最大的果子。即n=8,m=2,k=4:

輸入檔案的第1行包含三個整數n (1<=n<=300),m (2<=m<=n),k (1<=k<=n)。 n個果子依次編號1,2,…,n,且最大的果子的編號總是1。第2行到第n行描述了果樹的形態,每行包含三個整數a (1<=a<=n),b (1<=b<=n),c (0<=c<=10^5),表示存在一段難受值為c的樹枝連線果子a和果子b。

output

輸出檔案僅有一行,包含乙個整數,表示在滿足「大頭」的要求的前提下,九頭龍的難受值的最小值。如果無法滿足要求,輸出-1。

sample input

8 2 4

1 2 20

1 3 4

1 4 13

2 5 10

2 6 12

3 7 15

3 8 5

sample output

4 .

. . . .

分析看了z大佬的部落格才懂了這題

把題目簡化一下:

將一棵樹的結點染成m種顏色,每個結點只有一種顏色,在一條邊兩邊的結點的顏色相同會產生費用

(1)第1個結點必須是1顏色

(2)必須有k個1顏色

(3)每種顏色必須有乙個結點

那麼,可以發現乙個性質:

如果m>2,那麼對答案有貢獻的就只有和1相連的邊,其他的邊不會產生其他的價值

如果m=2,那麼只有1,2兩種顏色

如果n-k< m-1,那麼表示果子不夠吃,輸出-1

設f[i][j][0/1]為以i為根的子樹中,有j個1顏色,根染顏色1或不染顏色1的價值

與同顏色相連的,要加上邊的價值;否則,就不加。

. .

. .

.程式:

#include

#include

using

namespace

std;

int n,m,k,s[301],f[301][301][2],head[301],cnt;

struct edge

e[601];

void insert(int x,int y,int z)

void dp(int x,int fa)

}}int main()

for (int i=1;i<=n-1;i++)

memset(f,60,sizeof(f));

dp(1,0);

cout

<1][k][1];

return

0;}

NOI 2002 貪吃的九頭龍

給出一棵 n 個節點的樹,邊有邊權,現要求你將這 n 個點劃分到 m 個集合,集合不許為空。另要求 1 號集合必須包含 1 號點,並且 1 號集合的大小必須正好為 k 如果一條邊連線的兩個點屬於同乙個集合,則這條邊的邊權將被計入總代價。問總代價最少為多少。分析題目性質。首先我們保證能劃分出 m 個集...

NOI2002 貪吃的九頭龍

p2940貪吃的九頭龍 貪吃的九頭龍 dragon.pas c cpp 問題描述 傳說中的九頭龍是一種特別貪吃的動物。雖然名字叫 九頭龍 但這只是說它出生的時候有九個頭,而在成長的過程中,它有時會長出很多的新頭,頭的總數會遠大於九,當然也會有舊頭因衰老而自己脫落。有一天,有m個腦袋的九頭龍看到一棵長...

題解 NOI2002 貪吃的九頭龍

題目大意 有一棵樹,你需要將n個點染成m種顏色,且需滿足一下兩種條件 1.一號點必須是一號顏色,且一號顏色必須包含k個點 2.每種顏色必須包含至少乙個點 代價為若一條邊連線的顏色相同則得付出該邊的代價 求滿足以上兩種情況下的代價之和 首先,一眼看出是道樹dp題 然後日常套路,設f u j f u j...