pranay_teja
11/6/2018 - 8:54 AM

HR Roads and Libraries

#include <bits/stdc++.h>
using namespace std;

vector< vector<int> > g; // adjacency list defined globally (god knows why)

// https://www.hackerrank.com/challenges/torque-and-development/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=graphs

void DFS(int i, vector<bool> &visited, long &groupData){
    visited[i]=true;
    groupData+=1;
    for(int j=0;j<g[i].size();j++){
        if(visited[g[i][j]]==false){
            DFS(g[i][j],visited,groupData);
        }
    }
}
long minCost(long lib, long road) {
    vector<bool> visited(g.size(),false);
    long cost=0;
    for(int i=1;i<g.size();i++){
        if(visited[i]==false){
            long groupData=0;
            DFS(i,visited,groupData); 
            cost+=lib+(groupData-1)*road; // n vertices have (min) n-1 edges
        }
    }
    return cost;
}
int main()
{
    int t;
    cin>>t;
    while(t--){
        long v,e;
        long lib,road;
        cin>>v>>e>>lib>>road;
        bool ans=false;
        if(lib<=road){
            ans=true;
        }
        g.resize(v+1); // 1 indexed // resize graph for every testcase
        for(int i=0;i<e;i++){
            int x,y;
            cin>>x>>y;
            if(ans==false){
                g[x].push_back(y);
                g[y].push_back(x);
            }
        }
        if(ans==true){
            cout<<v*lib<<endl;
        }else{
            cout<<minCost(lib,road)<<endl;
        }
        g.resize(0); // resetting adj list b/w test cases ( as it is defined globally)
    }
    return 0;
}