From b0a4d4bdbbac0ac3f4f4702579234956a154bb1f Mon Sep 17 00:00:00 2001 From: Ritik Nandwal Date: Mon, 3 May 2021 19:17:03 +0530 Subject: [PATCH] Add kruskals implementation --- graph/kruskals.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 graph/kruskals.cpp diff --git a/graph/kruskals.cpp b/graph/kruskals.cpp new file mode 100644 index 0000000..d6fc748 --- /dev/null +++ b/graph/kruskals.cpp @@ -0,0 +1,67 @@ +#include +using namespace std; +struct node{ + int u,v,w; + node(int first,int second,int weight){ + u=first; + v=second; + w=weight; + } +}; +bool comp(node a,node b){ + return a.w < b.w; +} +int findPar(int u,vector &parent){ + if(u == parent[u]) + return u; + return findPar(parent[u],parent); +} +void Union(int u,int v,vector &parent,vector &size){ + u = findPar(u,parent); + v = findPar(v,parent); + if(size[u] < size[v]){ + parent[u] = v; + size[v] += size[u]; + }else{ + parent[v]=u; + size[u]+=size[v]; + } +} +int main(){ + int N,m; + cin>>N>>m; + vector edges; + for(int i=0;i>u>>v>>w; + edges.push_back(node(u,v,w)); + } + /* + sample testcase for trying + N=4,m=5 + 0 1 10 + 0 2 6 + 0 3 5 + 1 3 15 + 2 3 4 + */ + sort(edges.begin(),edges.end(),comp); + vector parent(N); + for(int i=0;i size(N,0); + int cost=0; + vector> mst; + for(auto it:edges){ + if(findPar(it.v,parent) != findPar(it.u,parent)){ + cost+=it.w; + mst.push_back({it.u,it.v}); + Union(it.u,it.v,parent,size); + } + } + cout<