description:
從前有棵樹。 找出k
k
個點a1
,a2,
…,ak
' role="presentation" style="position: relative;">a1,
a2,…
,aka
1,a2
,…,a
k。 使得∑
dis(
ai,a
i+1)
,(1<=
i<=k−
1)∑ di
s(ai
,ai+
1),(
1<=
i<=k−
1)
最小solution:
有乙個結論是這些點必然是乙個連通塊。
這樣我們可以dp
d
p。設dp
[i][
j][0
/1/2
] dp[
i][j
][0/
1/2]
表示根為
i i
的子樹,選了
j' role="presentation" style="position: relative;">j
j個點,兩個端點都在i/
i
/乙個在
i i
另乙個在連通塊葉子結點/兩個都在葉子結點。
然後轉移即可。
#include
using
namespace
std;
const
int n = 3005;
struct edge e[n << 1];
int n, cnt = 1, k;
int h[n], dp[n][n][3], sz[n];
void link(int u, int v, int w)
void dfs(int u, int last) }}
}sz[u] += sz[v];}}
}int main()
memset(dp, 0x3f3f, sizeof(dp));
dfs(1, 0);
int ans = 1e9;
for(int i = 1; i <= n; ++i)
printf("%d\n", ans);
return
0;}
bzoj 3754 Tree之最小方差樹
題目大意 給你乙個無相連通圖,要你找出乙個生成樹,使得他們的邊權的方差最小。n 100,m 2000,c 邊權 100 我們考慮最小生出樹常用的kruskal演算法,它需要得到乙個邊的排列,然後在進行貪心的加邊。我們可以考慮暴力每個排列,然後進行kruskal。這樣時間複雜度為o m m 我們發現複...
BZOJ2654 tree 生成樹 二分
題目鏈結 給你乙個無向帶權連通圖,每條邊是黑色或白色,求一棵最小權的恰好有 need 條白色邊的生成樹。題目保證有解,輸出最小權值。其中每條邊權在 1,100 範圍內。首先有乙個比較明顯的想法 用kruskal跑出乙個最小生成樹,然後再不斷往其中加邊調整白色邊的數量,用lct維護圈內最大異色邊。好吧...
Tree字典樹講解
就像樹根一樣,每個點就是節點,也像乙個網狀鍊錶。優點 對於字串可以減少無所謂的比較,效率很高。多說無益,上例題 ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第...