洛谷P1268 樹的重量

2021-09-26 05:41:14 字數 825 閱讀 3523

因為所有的節點都是葉節點,因此每個葉節點都是從已有的節點中分出來的

而每個節點都可以從 1 ~ j (j < i ) 中分出 (當然類似於floyd三層迴圈列舉也可以)

設i為要插入的節點 , j為dis[1][j] 中最小的那個(jfloyd的話是

for ( int i = 3;i <= n; ++i ) 

ans += minn;

}

其中i為要插入的節點,j為列舉的起點1,k位列舉的起點2,jk就是要分的線段

code

#include #include #include #include #define maxn 100

using namespace std ;

int n , a[maxn][maxn] , ans , minn ;

int main ()

}ans = a[1][2] ;

for(int i = 3 ; i <= n ; i ++)

ans += minn ;

}cout << ans << endl ;

}return 0 ;

}

洛谷 P1268 樹的重量

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

洛谷 P1268 樹的重量()

構造法。鍛鍊思維的好題,需要運用一些樹的性質。以下用g i,j 表示點i與點j之間的距離。首先,我們考慮n 2時的情況,很顯然答案就是g 1,2 接下來考慮n 3時的情況。由於所有點均為葉子節點,很顯然點3是從點1到點2的路徑上分叉出來的,就像下圖。設藍色部分長度為len,那麼答案就是g 1,2 l...

洛谷 P1268 樹的重量

構造類題目,看不出個所以然來。emmm,只好看題解 只有兩個點,那一條路徑就是 ans 考慮三個點,那麼 3 這個點相對於樹上的路徑 已經加入樹上的邊的距離 為 dis 1 3 dis 2 3 dis 1 2 2 秒啊,這樣就可以求出那一條藍邊的長度了 考慮四個點的情況 對於第四個點,我們發現單純只...