7 12 鏢局運鏢

2021-09-13 12:29:41 字數 932 閱讀 1632

假設有n個城市和m條道路,對應無向圖中的點和邊。每條路的過路費對應邊的權值。鏢局現在需要選擇一些道路進行疏通,以便邊距可以達到任意乙個城鎮,要求花費的銀子越少越好。換句話說,鏢局的要求就是用最少的邊讓圖連通(任意兩點之間可以互相到達),將多餘的邊去掉。

很顯然,要想讓有n個頂點的圖連通,那麼至少需要n-1條邊。如果乙個連通無向圖不包含迴路,那麼就是一棵樹,其實這裡就是求乙個圖的最小生成樹。這裡我們僅討論無向圖的最小生成樹。

既然要求讓邊的總權值最小,自然可以想到首先選擇最短的邊,然後選擇次短的邊……直到選擇了n-1條邊為止。這就需要先對所有的邊按照權值大小進行從小到大的排序,然後從最小的開始選,依次選擇每一條邊,直到選擇了n-1條邊讓整個圖連通為止。中間新增每一條邊時還需要判斷這條邊對應的兩個頂點是否已經連通,如果已經連通則捨棄這條邊,進行下一條邊的判斷。

判斷兩個頂點是否已經連通,可以使用深度優先搜尋或者廣度優先搜尋,但這樣效率很低。更好的選擇是使用並查集,將所有頂點放入乙個並查集中,判斷兩個頂點是否連通,僅需要判斷兩個頂點是否在同乙個集合(即是否有共同的祖先)即可,這樣時間複雜度僅為o(logn)。

#include#includeint f[14];

struct nodeans[14];

void init(int *a,int n)

int cmp(const void *a,const void *b)

int get_f(int x)

}int merge(int a,int b)

return 0;

}int main()

if(cnt==n-1)

break;

} if(i==m)

printf("impossible");

else

printf("%d",sum);

return 0;

}

PTA 鏢局運鏢

鏢局的運鏢,就是運貨 類似現在的物流 鏢局每到乙個新地方開展業務,都需要對運鏢途中的綠林好漢進行打點。好說話的打點費就比較低,不好說話的打點費就比較高。龍門鏢局現在有一趟鏢請你來規劃路線,已知城市的地圖,你需要選擇一些道路進行疏通,以便鏢局可以到達任意乙個城市,要求花費的銀子越少越好。第一行有兩個數...

鏢局運鏢(最小生成樹 Kruskal)

7 11 鏢局運鏢 30 分 鏢局的運鏢,就是運貨 類似現在的物流 鏢局每到乙個新地方開展業務,都需要對運鏢途中的綠林好漢進行打點。好說話的打點費就比較低,不好說話的打點費就比較高。龍門鏢局現在有一趟鏢請你來規劃路線,已知城市的地圖,你需要選擇一些道路進行疏通,以便鏢局可以到達任意乙個城市,要求花費...

啊哈演算法 鏢局運鏢(最小生成樹)

最近小哼迷上了 龍門鏢局 從恰克圖道武夷山,從張家口道老河口,從迪化道佛山,從蒙自道奉天.古代鏢局的運鏢,也就是現在的物流。鏢局每到乙個地方開展業務,都需要堆運鏢途中的綠林好漢進行打點 不給錢就不讓過路 好說話的打點費就比較低,不好說話的打點費就比較高。城鎮類似如下,頂點是城鎮編號,邊上的值表示這條...