嘟嘟嘟
一道非常好的構造題。
我反正是一點思路都沒有,最後還是看了題解。
假如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 #include11view codeusing
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 }
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 ...