P1268-树的重量【图论】
生活随笔
收集整理的這篇文章主要介紹了
P1268-树的重量【图论】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目大意
一棵樹有nnn個葉子節點,給出每兩個葉子節點之間的距離。求這棵樹的邊權之和。
解題思路
我們考慮每次加入一個節點。兩個節點時不用說。
加入第三個節點時,肯定是加入在節點1和節點2之間。
之后我們開始推導:當我們加入節點nnn時,我們可以考慮加入在1~x(x∈[2..n?1])1\sim x(x\in [2..n-1])1~x(x∈[2..n?1])之間。
為什么一定是從1開始,我們考慮是否有可能加入在x~yx\sim yx~y的路徑直接,其實沒有必要,因為如果加入在這兩個點之間,那么考慮加入到1~x1\sim x1~x和1~y1\sim y1~y的結果是一樣的。所以之間起點定義為111就好了。
codecodecode
#include<cstdio> #include<algorithm> using namespace std; int n,a[50][50],ans; int main() {while(1){scanf("%d",&n);if(!n) break;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)scanf("%d",&a[i][j]),a[j][i]=a[i][j];ans=a[1][2];for(int i=3;i<=n;i++){int len=2147483647;for(int j=2;j<i;j++)len=min(len,(a[1][i]+a[j][i]-a[1][j])/2);ans+=len;}printf("%d\n",ans);} }總結
以上是生活随笔為你收集整理的P1268-树的重量【图论】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 零跑全新车型 C16 实车亮相:预计定位
- 下一篇: P3385-[模板]负环【SPFA】