題目鏈結
有一棵點數為n的樹,樹邊有邊權。給你乙個在0~n之內的正整數k,你要在這棵樹中選擇k個點,將其染成黑色,並
將其他的n-k個點染成白色。將所有點染色後,你會獲得黑點兩兩之間的距離加上白點兩兩之間距離的和的收益。
問收益最大值是多少。
第一行兩個整數n,k。
接下來n-1行每行三個正整數fr,to,dis,表示該樹中存在一條長度為dis的邊(fr,to)。
輸入保證所有點之間是聯通的。
n<=2000,0<=k<=n
輸出乙個正整數,表示收益的最大值。
5 21 2 3
1 5 1
2 3 1
2 4 2
【樣例解釋】
將點1,2染黑就能獲得最大收益。
樹形dp。
首先不難想到設fi
,j為以編號為i的節點為根的子樹中有j個黑色節點對答案的貢獻。
這裡發現不好轉移,所以把該子樹內的點與子樹外的點組合所產生的權值也計算進去。考慮統計所有邊權對答案的貢獻,一條邊對答案產生的貢獻為邊權
∗(子樹
內黑色點
數量∗子
樹外黑色
點數量+
子樹內白
色點數量
∗子樹外
白色點數
量)。
用dfs來求,列舉 i 的每個兒子 j,現在的 f[
i]是包含了[1
,j−1
] 子樹,然後兩重迴圈列舉範圍是 [1
,j−1
] 的子樹總 size 和 j 的 size,來更新 f[
i],這樣更新之後的 f[
i]就是 [1
,j] 子樹的答案了。
通過奧妙重重的方法可以發現每個點對(u
,v) 只會在其lc
a 處被考慮到,所以複雜度是o(
n)。
//這一版圖方便結果跑得奇慢無比,雖然是過了。
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
inline
int read()
while(c >= '0' && c <='9')
return x * f;
}const
int n = 2000 + 10, inf = 0x3f3f3f3f;
int to[n<<1], val[n<<1], hd[n], nxt[n<<1], tot;
int siz[n];
int n, k;
ll f[n][n];
void insert(int u, int v, int w)
void init()
}void dfs(int u, int fa)
}void work()
//把每條邊的權值放到子樹裡處理,時間表現一下子正常了許多。
#include
#include
#include
#include
#include
#define ll long long
using
namespace
std;
inline
int read()
while(c >= '0' && c <='9')
return x * f;
}const
int n = 2000 + 10, inf = 0x3f3f3f3f;
int to[n<<1], val[n<<1], hd[n], nxt[n<<1], tot;
int siz[n];
int n, k;
ll f[n][n], tmp[n];
void insert(int u, int v, int w)
void init()
}void dfs(int u, int fa, int pre)
for(int i = 0; i <= min(siz[u], k); i++)
f[u][i] += (ll)pre * ((ll)i*(k-i) + (ll)(siz[u]-i)*(n-k-(siz[u]-i)));
}void work()
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個點染成白色。將所有點染色後,你會獲得黑點兩兩之間的距離加上白點兩兩之間距離的和的收益。問收益最大值是多少。輸入 第一行兩...
BZOJ 4033 HAOI2015 樹上染色
time limit 10 sec memory limit 256 mb submit 2569 solved 1088 submit status discuss description 有一棵點數為n的樹,樹邊有邊權。給你乙個在0 n之內的正整數k,你要在這棵樹中選擇k個點,將其染成黑色,並 ...