如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz
輸入格式:
第一行包含兩個整數n、m,表示該圖共有n個結點和m條無向邊。(n<=5000,m<=200000)
接下來m行每行包含三個整數xi、yi、zi,表示有一條長度為zi的無向邊連線結點xi、yi
輸出格式:
輸出包含乙個數,即最小生成樹的各邊的長度之和;如果該圖不連通則輸出orz
輸入樣例#1:
4 5輸出樣例#1:1 2 2
1 3 2
1 4 3
2 3 4
3 4 3
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
vara:array[0..5000,0..5000]of longint;
low:array[0..5000]of longint;
f:array[0..5000]of boolean;
x,y,z,i,j,k,n,m,min,num,ans:longint;
begin
fillchar(f,sizeof(f),true);
readln(n,m);
for i:=1 to m do
begin
read(x,y,z);
if a[x,y]=0 then a[x,y]:=maxlongint;
if z0 then low[i]:=a[1,i]
else low[i]:=maxlongint;
f[1]:=false;
for i:=1 to n-1 do
begin
min:=maxlongint;
for j:=1 to n do
begin
if (f[j])and(low[j]0) then
low[j]:=a[num,j];
end;
write(ans);
end.
最小生成樹模板
prim演算法理解可以參考部落格 prim演算法模板 int prime int v int i,j,sum 0,min,k sum是權重和 for i 1 i n i lowcost i 表明當前狀態下在u內距離v點 s中各點 距離的最小值,每個u中點s 中點 都計算 lowcost i map ...
最小生成樹 模板
const int maxn 1010 const int maxm 200020 struct edge edges maxm int father maxn int find int x int cmp edge a,edge b 將邊按權值排序 int kruskal int n,int m ...
模板 最小生成樹
題目描述 如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出...