日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

hdu5253最小生成树

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

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


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


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


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


第二行輸出 1 個正整數(shù),代表老 Jack 額外最少購進管道的長度。
?

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


思路:

? ? ? 把所有點連接在一起的最下費用,直接最小生成樹就行了,一共是1000*1000*2條邊,時間復雜度沒啥問題,其實總感覺這個題目有點別扭,就是水流的方向問題,感覺是最小樹形圖,哎!想多了。


#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ù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

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

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