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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

hdu5253最小生成树

發(fā)布時(shí)間:2025/6/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu5253最小生成树 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:(中文題,直接粘過(guò)來(lái)吧)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?連接的管道
? ? 老 Jack 有一片農(nóng)田,以往幾年都是靠天吃飯的。但是今年老天格外的不開眼,大旱。所以老 Jack 決定用管道將他的所有相鄰的農(nóng)田全部都串聯(lián)起來(lái),這樣他就可以從遠(yuǎn)處引水過(guò)來(lái)進(jìn)行灌溉了。當(dāng)老 Jack 買完所有鋪設(shè)在每塊農(nóng)田內(nèi)部的管道的時(shí)候,老 Jack 遇到了新的難題,因?yàn)槊恳粔K農(nóng)田的地勢(shì)高度都不同,所以要想將兩塊農(nóng)田的管道鏈接,老 Jack 就需要額外再購(gòu)進(jìn)跟這兩塊農(nóng)田高度差相等長(zhǎng)度的管道。

? ? 現(xiàn)在給出老 Jack農(nóng)田的數(shù)據(jù),你需要告訴老 Jack 在保證所有農(nóng)田全部可連通灌溉的情況下,最少還需要再購(gòu)進(jìn)多長(zhǎng)的管道。另外,每塊農(nóng)田都是方形等大的,一塊農(nóng)田只能跟它上下左右四塊相鄰的農(nóng)田相連通。
?
Input
第一行輸入一個(gè)數(shù)字T(T≤10),代表輸入的樣例組數(shù)


輸入包含若干組測(cè)試數(shù)據(jù),處理到文件結(jié)束。每組測(cè)試數(shù)據(jù)占若干行,第一行兩個(gè)正整數(shù) N,M(1≤N,M≤1000),代表老 Jack 有N行*M列個(gè)農(nóng)田。接下來(lái) N 行,每行 M 個(gè)數(shù)字,代表每塊農(nóng)田的高度,農(nóng)田的高度不會(huì)超過(guò)100。數(shù)字之間用空格分隔。


Output
對(duì)于每組測(cè)試數(shù)據(jù)輸出兩行:


第一行輸出:"Case #i:"。i代表第i組測(cè)試數(shù)據(jù)。


第二行輸出 1 個(gè)正整數(shù),代表老 Jack 額外最少購(gòu)進(jìn)管道的長(zhǎng)度。
?

Sample Input
2
4 ?3
9 12 4
7 8 56
32 32 43
21 12 12
2 ?3
34 56 56
12 23 4


Sample Output
Case #1:
82
Case #2:
74


思路:

? ? ? 把所有點(diǎn)連接在一起的最下費(fèi)用,直接最小生成樹就行了,一共是1000*1000*2條邊,時(shí)間復(fù)雜度沒(méi)啥問(wèn)題,其實(shí)總感覺(jué)這個(gè)題目有點(diǎn)別扭,就是水流的方向問(wèn)題,感覺(jué)是最小樹形圖,哎!想多了。


#include<stdio.h> #include<string.h> #include<algorithm>#define N_node 1000*1000+10 #define N_edge 1000 * 1000 * 2 + 10using namespace std;typedef struct {int a ,b ,c; }EDGE;EDGE E[N_edge]; int map[1005][1005];bool camp(EDGE a ,EDGE b) {return a.c < b.c; }int mer[N_node];int finds(int x) {return x == mer[x] ? x : mer[x] = finds(mer[x]); }int abss(int x) {return x > 0 ? x : -x; }int main () {int t ,n ,m ,i ,j ,cas = 1;scanf("%d" ,&t);while(t--){scanf("%d %d" ,&n ,&m);for(i = 1 ;i <= n ;i ++)for(j = 1 ;j <= m ;j ++)scanf("%d" ,&map[i][j]);int nowid = 0;for(i = 1 ;i <= n ;i ++)for(j = 1 ;j <= m ;j ++){int now = (i - 1) * m + j;mer[now] = now;if(j < m){nowid ++;E[nowid].a = now;E[nowid].b = (i - 1) * m + j + 1;E[nowid].c = abss(map[i][j] - map[i][j+1]);}if(i < n){nowid ++;E[nowid].a = now;E[nowid].b = (i - 1 + 1) * m + j;E[nowid].c = abss(map[i][j] - map[i+1][j]);}}sort(E + 1 ,E + nowid + 1 ,camp);int sum = 0;for(i = 1 ;i <= nowid ;i ++){int a = finds(E[i].a);int b = finds(E[i].b);if(a != b){mer[a] = b;sum += E[i].c;}}printf("Case #%d:\n" ,cas ++);printf("%d\n" ,sum);}return 0; }

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的hdu5253最小生成树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。