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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU 5253 最小生成树(kruskal)+ 并查集

發布時間:2024/4/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 5253 最小生成树(kruskal)+ 并查集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接


?

#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define N 1000010 using namespace std; struct node {int a;//端點1int b;//端點2int num;//權值 }; bool cmp(node x,node y)//按權值升序 {return x.num<y.num; } int maps[1003][1003]; node edge[N*2];//邊數=2mn-m-n<2mn int father[N]; int r[N]; int finds(int x) {if(father[x]!=x)father[x]=finds(father[x]);return father[x]; } void connect(int a,int b) {if(r[a]>r[b])father[b]=a;else if(r[a]<r[b])father[a]=b;else{father[a]=b;r[b]++;} } int main() {int T,cas=1,n,m,ans,id;int i,j;scanf("%d",&T);while(T--){int numedge=0;//邊數ans=0;memset(r,0,sizeof(r));scanf("%d%d",&n,&m);for(i=1;i<=n;i++){for(j=1;j<=m;j++)scanf("%d",&maps[i][j]);}for(i=1;i<=n;i++){for(j=1;j<=m;j++){id=(i-1)*m+j;father[id]=id;if(i<n)//除最后一行外{numedge++;edge[numedge].a=id;edge[numedge].b=i*m+j;edge[numedge].num=abs(maps[i][j]-maps[i+1][j]);}if(j<m)//除最后一列外{numedge++;edge[numedge].a=id;edge[numedge].b=(i-1)*m+j+1;edge[numedge].num=abs(maps[i][j]-maps[i][j+1]);}}}sort(edge+1,edge+numedge+1,cmp);//權值排序for(i=1;i<=numedge;i++){int x=finds(edge[i].a);int y=finds(edge[i].b);if(x!=y){connect(x,y);ans+=edge[i].num;}}printf("Case #%d:\n%d\n",cas++,ans);}return 0; }

?


?

轉載于:https://www.cnblogs.com/westwind1005/p/5975231.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的HDU 5253 最小生成树(kruskal)+ 并查集的全部內容,希望文章能夠幫你解決所遇到的問題。

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