wikioi1231 最優佈線問題

2021-07-26 11:11:24 字數 2190 閱讀 3931

題目描述 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臺計算機之間的連線費用可能是不同的。為了節省費用,我們考慮採用間接資料傳輸結束,就是一台計算機可以間接地通過其他計算機實現和另外一台計算機連線。為了使得任意兩台計算機之間都是連通的 不管是直接還是間接的 需要在若干臺計算機之...