洛谷 模板 最小生成樹

2022-04-12 01:27:16 字數 2352 閱讀 7257

如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出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演算法(具體的在這裡)

#include #include

#include

using

namespace

std;

const

int maxnum = 100

;const

int maxint = 999999;//

各陣列都從下標1開始

int dist[maxnum]; //

表示當前點到源點的最短路徑長度

int prev[maxnum]; //

記錄當前點的前乙個結點

int c[maxnum][maxnum]; //

記錄圖的兩點間路徑長度

int n, line; //

圖的結點數和路徑數

//n -- n nodes

//v -- the source node

//dist -- the distance from the ith node to the source node

//prev -- the previous node of the ith node

//c -- every two nodes' distance

void dijkstra(int n, int v, int *dist, int *prev, int

c[maxnum][maxnum])

dist[v] = 0

; s[v] = 1

;

//依次將未放入s集合的結點中,取dist最小值的結點,放入結合s中

//一旦s包含了所有v中頂點,dist就記錄了從源點到所有其他頂點之間的最短路徑長度

//注意是從第二個節點開始,第乙個為源點

for(int i=2; i<=n; ++i)

s[u] = 1; //

表示u點已存入s集合中

//更新dist

for(int j=1; j<=n; ++j)

if((!s[j]) && c[u][j]

}}}//

查詢從源點v到終點u的路徑,並輸出

void searchpath(int *prev,int v, int

u) que[tot] =v;

for(int i=tot; i>=1; --i)

if(i != 1

) cout

<< que[i] << "

-> ";

else

cout

<< que[i] <

}int

main()

}for(int i=1; i<=n; ++i)

dist[i] =maxint;

for(int i=1; i<=n; ++i)

dijkstra(n,

1, dist, prev, c);

//最短路徑長度

cout << "

源點到最後乙個頂點的最短路徑長度:

"<< dist[n] <

//路徑

cout << "

源點到最後乙個頂點的路徑為: ";

searchpath(prev,

1, n);

}

洛谷 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 輸出格式 輸出...