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)
}if(count == n-1) //找到最小生成樹
return ans;
else
//圖不連通
return -1;
}//初始化及構圖
for(int i = 0; i < n; i++)
father[i] = i;
sum = 0;
for(int i = 0; i < m; i++)
int ans = kruskal();
int g[110][110],vis[110],low[110],pre[110];
//g存放圖,vis表示va、vb集合,low表示生成樹邊長集合
//pre[i]對應dist[i]中所表示的最短邊,記錄當前點的父節點
void prim(int n)
}for(int i = 1; i < n; i++) //迴圈n-1次,每次加入乙個點
}if(pos == 0) return; //沒有點可以擴充套件,圖g不連通,可用於判斷聯通
ans += min; //新增邊
vis[pos] = 1;
for(int j = 1; j <= n; j++) //對每個與pos點相鄰的未遍歷的點j,更新到j點最近的點及距離}}
printf("%d\n",ans);
}//初始化呼叫
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
g[i][j] = 0xffffff0;
for(int i = 1; i <= n*(n-1)/2; i++)
最小生成樹模板
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 ...
模板 最小生成樹
題目描述 如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出...
模板 最小生成樹
如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出包含乙個數,即最小生成樹...