BZOJ4033 HAOI2015 樹上染色

2022-08-23 14:48:14 字數 870 閱讀 1051

本來是考慮, $ f[x][i][0/1] $ 表示 $ x $ 子樹中有$i$個黑點,且 $ x $ 是白點/黑點。但是這裡的答案是要統計不同的子樹的貢獻的。所以就gg了。

看了題解。

應該是要設$f[x][i]$表示$x$子樹中有$i$個黑點,對答案的貢獻。

轉移的時候,就可以單獨計算出$x->y$(y是x的兒子)這條邊的貢獻。

貢獻怎麼算呢?就是統計一下$y$內有多少黑(白)點、$y$外有多少黑(白)點,算一下有多少對,最後乘上$x->y$的邊權。

#include#include#include#includeusing namespace std;

#define ll long long

#define rg register

#define inf 0x3f3f3f3f

const int mx=4005;

template inline void read(_tp&x)

while(isdigit(c))if(b)x=-x;return;

}int n,k,cnt;

int head[mx],sz[mx];

ll f[mx][mx];

struct edgeedge[mx<<1];

inline void add_edge(int x,int y,int z)

void dfs(int x,int fa)

sz[x]+=sz[y];

}}int main()

memset(f,-inf,sizeof(f));

dfs(1,-1);

printf("%lld\n",f[1][k]);

return 0;

}

bzoj4033 HAOI2015 樹上染色

題目鏈結 有一棵點數為n的樹,樹邊有邊權。給你乙個在0 n之內的正整數k,你要在這棵樹中選擇k個點,將其染成黑色,並 將其他的n k個點染成白色。將所有點染色後,你會獲得黑點兩兩之間的距離加上白點兩兩之間距離的和的收益。問收益最大值是多少。第一行兩個整數n,k。接下來n 1行每行三個正整數fr,to...

bzoj4033 HAOI2015 樹上染色

有一棵點數為n的樹,樹邊有邊權。給你乙個在0 n之內的正整數k,你要在這棵樹中選擇k個點,將其染成黑色,並 將其他的n k個點染成白色。將所有點染色後,你會獲得黑點兩兩之間的距離加上白點兩兩之間距離的和的收益。問收益最大值是多少。輸入保證所有點之間是聯通的。n 2000,0 k n 來自 臥槽原來我...

BZOJ4033 HAOI2015 樹上染色

bzoj4033 haoi2015 樹上染色 試題描述 有一棵點數為n的樹,樹邊有邊權。給你乙個在0 n之內的正整數k,你要在這棵樹中選擇k個點,將其染成黑色,並 將其他的n k個點染成白色。將所有點染色後,你會獲得黑點兩兩之間的距離加上白點兩兩之間距離的和的收益。問收益最大值是多少。輸入 第一行兩...