Skip to content

Commit 768333b

Browse files
Added Kruskal's MST Algorithm
1 parent f816cdb commit 768333b

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// Author : Avishkar A. Hande
2+
3+
#include<bits/stdc++.h>
4+
#define ll long long
5+
using namespace std;
6+
7+
const int maxS = 1e5+10;
8+
vector<pair<ll, ll>> adj[maxS];
9+
10+
template <typename T>
11+
class DisjointSet{
12+
public:
13+
vector<T> parent;
14+
DisjointSet(T n){
15+
parent.resize(n+1);
16+
for(T i = 0; i <= n; i++) parent[i] = i;
17+
}
18+
T find(T a){
19+
if(parent[a] == a) return a;
20+
return parent[a] = find(parent[a]);
21+
}
22+
void join(T a, T b){
23+
if(find(a) == find(b)) return;
24+
parent[find(a)] = find(b);
25+
return ;
26+
}
27+
};
28+
29+
30+
// this function stores the MST in adjacency list
31+
// Note : It does not store the original graph
32+
33+
void kruskal(ll n, vector<vector<ll>> &edges){
34+
sort(edges.begin(), edges.end());
35+
DisjointSet<ll> d(n+1);
36+
for(int i = 0; i < edges.size(); i++){
37+
if(d.find(edges[i][1])!=d.find(edges[i][2])){
38+
d.join(d.find(edges[i][1]), d.find(edges[i][2]));
39+
adj[edges[i][1]].push_back({edges[i][2],edges[i][0]});
40+
adj[edges[i][2]].push_back({edges[i][1],edges[i][0]});
41+
}
42+
}
43+
}
44+
45+
int main()
46+
{
47+
#ifndef ONLINE_JUDGE
48+
freopen("input.txt", "r", stdin);
49+
freopen("output.txt", "w", stdout);
50+
#endif
51+
ios_base::sync_with_stdio(false);
52+
cin.tie(NULL);
53+
ll nodes, edges;
54+
cin >> nodes >> edges;
55+
vector<vector<ll>> edgesv;
56+
for(int i = 0; i < edges; i++){
57+
ll v1, v2, w;
58+
cin >> v1 >> v2 >> w;
59+
edgesv.push_back({w, v1, v2});
60+
}
61+
kruskal(nodes, edgesv);
62+
for(int i = 1; i <= nodes; i++){
63+
for(pair<ll, ll> p : adj[i]){
64+
cout << i << " " << p.first << " " << p.second << endl;
65+
}
66+
}
67+
}
68+
69+

0 commit comments

Comments
 (0)