日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

问题 D: 最小生成树II

發布時間:2025/3/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 问题 D: 最小生成树II 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

問題 D: 最小生成樹II

時間限制: 1 Sec??內存限制: 128 MB
提交: 89??解決: 44
[提交] [狀態] [討論版] [命題人:admin]

題目描述

小A有一張n個點的帶權無向圖,這張無向圖非常特別,首先第i個點有一個點權ai,之后這張無向圖是一張完全圖,且邊(u,v)的權值為au+av。現在小A想找一個這張圖的邊權之和最小的生成樹,需要你來幫幫他。

?

輸入

第一行一個正整數n
第二行n個整數a1,a2…an
1≤n≤105
0≤ai≤109

?

輸出

輸出邊權和最小的生成樹的邊權之和

?

樣例輸入

3 1 2 3

?

樣例輸出

7

方法:因為兩點之間的邊一定是等于這兩點的權相加,所以若要生成權和最小的一棵樹,則每條邊的權要盡可能的小,因此此題只需要找到權最小的點,并以這點為起點與每一個其他點兩兩相連,這樣構成的樹權和一定最小。

AC代碼

#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <cstring> #include <map> #include <stack> #include <queue> #include <vector> #include <bitset> #include <set> #include <utility> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f #define rep(i,l,r) for(int i=l;i<=r;i++) #define lep(i,l,r) for(int i=l;i>=r;i--) #define ms(arr) memset(arr,0,sizeof(arr)) //priority_queue<int,vector<int> ,greater<int> >q; const int maxn = (int)1e5 + 5; const ll mod = 1e9+7; int main() {//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);ios::sync_with_stdio(0),cin.tie(0);ll n;cin>>n;ll nape=0;ll a;ll minn=mod;for(ll i=1;i<=n;i++) {cin>>a;nape+=a;minn=min(minn,a);}nape+=minn*(n-2);if(n==1)cout<<"0"<<endl;elsecout<<nape<<endl;return 0; }

?

總結

以上是生活随笔為你收集整理的问题 D: 最小生成树II的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。