vector<int> pr;
vector<int> sz;
vector<vector<int>> ans;
    
void mset(int u)
{
    pr[u] = u ;
    sz[u] = 1;
}
int fset(int u)
{
    if(pr[u] == u)
    return u;
    
    return pr[u] = fset(pr[u]);
}
void uset(int u , int v)
{
    u = fset(u);
    v = fset(v);
    if(u != v)
    {
        if(sz[u] < sz[v])
        swap(u , v);
        
        sz[u] += sz[v];
        pr[v] = pr[u];
    }
}
int com(vector<int> a , vector<int> b)
{
    return a[0] > b[0];
}
int spanningTree(int V, vector<vector<int>> adj[])
{
    // code here
    for(int i = 0 ; i < V ; i++)
    {
        mset(i);
    }
    int cost = 0;
    for(int i = 0 ; i < V ;i++)
    {
        for(auto j : adj[i] )
        {
            ans.push_back( {j[1],j[0],i} );
        }
    }
    
    sort(ans.begin() , ans.end());
    for(auto i : ans )
    {
        int w = i[0];
        int u = i[1];
        int v = i[2];
        u = fset(u);
        v = fset(v);
        if(v == u)
        {
            continue ;
        }
        else
        {
            cost += w;
            uset(u , v);
        }
        
        
        
    }
    return cost ;
}
// i was trying to do mst using Kruskal algo on gfg practice , there the graph (weighted) was implemented using array of 2d vector , so i tried to convert it into a 2d vector having first element as weight so that it can easily get sorted when using sort() function but i am getting segmentation fault , i dont know what is the bug .... plz help find the problem in code .
