洛谷1268 樹的重量
阿新 • • 發佈:2018-07-26
無奈 isp close pan 多余 最小 aps org .org
打眼一看就是最小生成樹嘛,但經過板子wa掉的經歷後得知,,emmmm,原來是,
構造!
(雖然不知是什麽但覺得聽起來很厲害的樣子...手動微笑)
n=2的情況 自然就是g(1,2)
n=3的情況,由於所有點均為葉子節點,運用樹的性質,藍線部分的 len=(g(1,3)+g(2,3)-g(1,2)) / 2
n>3的情況也同理,枚舉i看點n是不是從1~i的路徑上分叉出來的,求出最小的len加入答案即可
若認為點4是從1~2的路徑上分叉出來的,答案就會加上紅色部分長度。但是紅色部分長度有一部分多余,只有點4是從1~3路徑上分叉出來的,才能加上正確答案(藍色部分)
(洛谷的水印似乎暴露了些什麽,消不掉我也很無奈....)
構造好題
#pragma GCC optimize(3) #include<bits/stdc++.h> using namespace std; const int maxn=30; const int INF=(1<<30); int d[maxn][maxn]; int main() { int n; while(scanf("%d",&n)==1&&n) { for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) scanf(View Code"%d",&d[i][j]),d[j][i]=d[i][j]; int ans=d[1][2]; for(int i=3;i<=n;i++){ int t=INF; for(int j=2;j<i;j++) t=min(t,(d[1][i]+d[j][i]-d[1][j])/2); ans+=t; } printf("%d\n",ans); } return 0; }
以上
洛谷1268 樹的重量