題目描述 description
學校需要將n
臺計算機連線起來,不同的
2臺計算機之間的連線費用可能是不同的。為了節省費用,我們考慮採用間接資料傳輸結束,就是一台計算機可以間接地通過其他計算機實現和另外一台計算機連線。
為了使得任意兩台計算機之間都是連通的(不管是直接還是間接的),需要在若干臺計算機之間用網線直接連線,現在想使得總的連線費用最省,讓你程式設計計算這個最小的費用。
輸入描述 input description
輸入第一行為兩個整數
n,m(
2<=n<=100000,2<=m
<=100000
),表示計算機總數,
和可以互相建立連線的連線個數。
接下來m行,每行三個整數a,b,c 表示在機器a和機器b之間建立連線的話費是c。(題目保證一定存在可行的連通方案, 資料中可能存在權值不一樣的重邊,但是保證沒有自環)
輸出描述 output description
輸出只有一行乙個整數,表示最省的總連線費用。
樣例輸入 sample input
3 31 2 1
1 3 2
2 3 1
樣例輸出 sample output 2
題解:最小生成樹,考慮到有重邊用kruskal比較好
const
maxn=100000;
var edge:array[0..maxn,1..3]of longint;
fa,r:array[0..maxn]of longint;
n,i,j,m:longint;
ans:int64;
function find(x:longint):longint;
begin
if fa[x]=x then exit(x);
fa[x]:=find(fa[x]);
find:=fa[x];
end;
procedure union(x,y:longint);
var u,v:longint;
begin
u:=find(x);v:=find(y);
if u<>v then
begin
if r[u]<=r[v] then
begin
fa[u]:=v;
if r[u]=r[v] then inc(r[v]);
endelse fa[v]:=u;
end;
end;
procedure qsort(l,r:longint);
var i,j,key:longint;
begin
if l>r then exit;
i:=l;j:=r;
key:=edge[(l+r)shr 1,3];
repeat
while edge[i,3]key do dec(j);
if i<=j then
begin
edge[0]:=edge[i];edge[i]:=edge[j];edge[j]:=edge[0];
inc(i);dec(j);
end;
until i>j;
qsort(l,j);
qsort(i,r);
end;
procedure kruskal;
var i:longint;
begin
for i:=1 to m do
if find(edge[i,1])<>find(edge[i,2]) then
begin
union(edge[i,1],edge[i,2]);
inc(ans,edge[i,3]);
end;
end;
procedure init;
var i,j:longint;
begin
readln(n,m);
for i:=1 to n do
fa[i]:=i;
for i:=1 to m do
readln(edge[i,1],edge[i,2],edge[i,3]);
end;
begin
init;
qsort(1,m);
kruskal;
writeln(ans);
end.
WikiOI 1231 最優佈線問題
這個問題讓無數人崩潰,而且沒有標程。我來貢獻乙個吧。從網上的標準kruskal 並查集 改的 我不會並查集 include include includeusing namespace std struct self self s 1000001 int a,b,m,n long long z 0 ...
1231 最優佈線問題
時間限制 1 s 空間限制 128000 kb 題目等級 silver 題解學校需要將n臺計算機連線起來,不同的2臺計算機之間的連線費用可能是不同的。為了節省費用,我們考慮採用間接資料傳輸結束,就是一台計算機可以間接地通過其他計算機實現和另外一台計算機連線。為了使得任意兩台計算機之間都是連通的 不管...
1231 最優佈線問題 kruskal
題目描述 description 學校需要將n 臺計算機連線起來,不同的 2臺計算機之間的連線費用可能是不同的。為了節省費用,我們考慮採用間接資料傳輸結束,就是一台計算機可以間接地通過其他計算機實現和另外一台計算機連線。為了使得任意兩台計算機之間都是連通的 不管是直接還是間接的 需要在若干臺計算機之...