列舉 Luogu P1268 樹的重量

2022-09-18 01:03:11 字數 1119 閱讀 5782

樹可以用來表示物種之間的進化關係。一棵「進化樹」是乙個帶邊權的樹,其葉節點表示乙個物種,兩個葉節點之間的距離表示兩個物種的差異。現在,乙個重要的問題是,根據物種之間的距離,重構相應的「進化樹」。

令n=,用乙個n上的矩陣m來定義樹t。其中,矩陣m滿足:對於任意的i,j,k,有m[i,j] + m[j,k] >= m[i,k]。樹t滿足:

1.葉節點屬於集合n;

2.邊權均為非負整數;

3.dt(i,j)=m[i,j],其中dt(i,j)表示樹上i到j的最短路徑長度。

如下圖,矩陣m描述了一棵樹。

樹的重量是指樹上所有邊權之和。對於任意給出的合法矩陣m,它所能表示樹的重量是惟一確定的,不可能找到兩棵不同重量的樹,它們都符合矩陣m。你的任務就是,根據給出的矩陣m,計算m所表示樹的重量。下圖是上面給出的矩陣m所能表示的一棵樹,這棵樹的總重量為15。

輸入格式:

輸入資料報含若干組資料。每組資料的第一行是乙個整數n(2輸入資料以n=0結尾。

輸出格式:

對於每組輸入,輸出一行,乙個整數,表示樹的重量。

輸入樣例#1: 複製

5

5 9 12 8

8 11 7

5 14

415 36 60

31 55

360

輸出樣例#1: 複製

15

71

1 #include2 #include3

using

namespace

std;

4const

int inf=(1

<<30);5

int d[60][60

],n;

6int

main()

720 printf("

%d\n

",ans);21}

22return0;

23 }

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 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...

洛谷1268樹的重量(樹)

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