洛谷 P3366 模板 最小生成樹

2021-07-26 19:57:46 字數 2415 閱讀 7963

題目描述

如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz

輸入輸出格式

輸入格式:

第一行包含兩個整數n、m,表示該圖共有n個結點和m條無向邊。(n<=5000,m<=200000)

接下來m行每行包含三個整數xi、yi、zi,表示有一條長度為zi的無向邊連線結點xi、yi

輸出格式:

輸出包含乙個數,即最小生成樹的各邊的長度之和;如果該圖不連通則輸出orz

輸入輸出樣例

輸入樣例#1:

4 5

1 2 2

1 3 2

1 4 3

2 3 4

3 4 3

輸出樣例#1:

7 說明

時空限制:1000ms,128m

資料規模:

對於20%的資料:n<=5,m<=20

對於40%的資料:n<=50,m<=2500

對於70%的資料:n<=500,m<=10000

對於100%的資料:n<=5000,m<=200000

所以最小生成樹的總邊權為2+2+3=7

分析:最小生成樹模版題。

(並查集+排序+kruskal演算法)

**:

var

p,r:array [1..10001] of longint;

a:array [1..200001,1..3] of longint;

n,m,p1,u,v,w,ans,k,i:longint;

function

find

(x:longint):longint;

var y,root,w:longint;

begin

y:=x;

while p[y]>0

do y:=p[y];

root:=y;

y:=x;

while p[y]>0

dobegin

w:=p[y];

p[y]:=root;

y:=w;

end;

find:=root;

end;

procedure

union

(x,y:longint);

var u,v:longint;

begin

u:=find(x);

v:=find(y);

if u=v then

exit;

if r[u]<=r[v] then

begin

p[u]:=v;

if r[u]=r[v] then inc(r[v]);

endelse p[v]:=u;

end;

procedure

qsort

(l,r:longint);

var i,j,key,temp:longint;

begin

if l>=r then

exit;

i:=l;j:=r;

key:=a[l+random(r-l+1),3];

repeat

while (a[i,3]do inc(i);

while (a[j,3]>key) do dec(j);

if i<=j then

begin

temp:=a[i,1];a[i,1]:=a[j,1];a[j,1]:=temp;

temp:=a[i,2];a[i,2]:=a[j,2];a[j,2]:=temp;

temp:=a[i,3];a[i,3]:=a[j,3];a[j,3]:=temp;

inc(i);dec(j);

end;

until i>j;

qsort(l,j);

qsort(i,r);

end;

begin

readln(n,m);

for i:=1

to m do

begin

readln(u,v,w);

inc(k);

a[k,1]:=u;

a[k,2]:=v;

a[k,3]:=w;

end;

qsort(1,k);

for i:=1

to k do

begin

if find(a[i,1])<>find(a[i,2]) then

begin

union(a[i,1],a[i,2]);

ans:=ans+a[i,3];

end;

end;

write(ans);

end.

洛谷 P3366 模板 最小生成樹

題目描述 如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi輸出格式 輸出包含乙個數,即最小...

洛谷 P3366 模板 最小生成樹

題目描述 如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出...

洛谷 P3366 模板 最小生成樹

如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出包含乙個數,即最小生成樹...