luogu P1268 樹的重量

2022-05-09 13:12:09 字數 1016 閱讀 9391

嘟嘟嘟

一道非常好的構造題。

我反正是一點思路都沒有,最後還是看了題解。

假如n = 2,那麼樹的重量就是di,j。

然後n = 3,畫乙個圖:

,則重量=(d1,3 + d2,3 - d1,2) / 2。

n = 4同理:

,加上的應該是(d1,4 + dj,4 - d1,j) / 2 (j < 4)的最小值,這裡面j = 3。因為如果不是最小值的話,比如 j = 2,那麼多加了一段圖中紅色的部分。

依次類推,樹的重量就構造出來了。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11

using

namespace

std;

12#define enter puts("")

13#define space putchar(' ')

14#define mem(a, x) memset(a, x, sizeof(a))

15#define rg register

16 typedef long

long

ll;17 typedef double

db;18

const

int inf = 0x3f3f3f3f;19

const db eps = 1e-8;20

const

int maxn = 35;21

inline ll read()

2230 inline void

write(ll x)

3136

37int

n, g[maxn][maxn];

3839

intmain()

4053

write(ans), enter;54}

55return0;

56 }

view code

luogu P1268 樹的重量

一開始把這題想複雜了,這裡記 di i j 表示 i 到 j 的距離 首先如果 n 2 答案顯然為 di 1 2 如果 n 3 懶得畫圖了盜圖過來 那麼3號點會從1,2號點的路徑上伸出去,相比較 n 2 答案多出了 frac n 4 的情況 如果把4看做從1,2號點路徑上伸出去的,那麼答案 紅色部分...

列舉 Luogu P1268 樹的重量

樹可以用來表示物種之間的進化關係。一棵 進化樹 是乙個帶邊權的樹,其葉節點表示乙個物種,兩個葉節點之間的距離表示兩個物種的差異。現在,乙個重要的問題是,根據物種之間的距離,重構相應的 進化樹 令n 用乙個n上的矩陣m來定義樹t。其中,矩陣m滿足 對於任意的i,j,k,有m i,j m j,k m i...

p1268 樹的重量

傳送門 題目 樹可以用來表示物種之間的進化關係。一棵 進化樹 是乙個帶邊權的樹,其葉節點表示乙個物種,兩個葉節點之間的距離表示兩個物種的差異。現在,乙個重要的問題是,根據物種之間的距離,重構相應的 進化樹 令n 用乙個n上的矩陣m來定義樹t。其中,矩陣m滿足 對於任意的i,j,k,有m i,j m ...