因為所有的節點都是葉節點,因此每個葉節點都是從已有的節點中分出來的
而每個節點都可以從 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 秒啊,這樣就可以求出那一條藍邊的長度了 考慮四個點的情況 對於第四個點,我們發現單純只...