這是先前做的幾道最小生成樹的題目,基本都是裸題。
題意:求最大生成樹
由于數據比較水,用prime和krusical都可以。我是用krusical做的
?
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; int n,m,f[1010]; struct node { int x,y,s; }e[20010]; bool cmp(node s, node v) { return s.s>v.s; } int find(int x) { if (x==f[x]) return x; f[x]=find(f[x]); return f[x]; } void krusical() { int i,t=0,ans=0; for (i=0; i<m; i++) { int x=find(e[i].x); int y=find(e[i].y); if (x!=y) { ans+=e[i].s; f[y]=f[x]; t++; } if (t==n-1) break; } if (t==n-1) cout<<ans<<endl; else cout<<"-1"<<endl; } int main () { cin>>n>>m; int i,j; for (i=1; i<=n; i++) f[i]=i; for (i=0; i<m; i++) scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].s); sort(e,e+m,cmp); krusical(); return 0; }
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
