樂鑫筆試--地鐵打卡活動

 



#include <bits/stdc++.h>
using namespace std;
//假設有一百個節點
const int N=100;


int find( vector<int>&p,int x){
    return x==p[x]?p[x]:p[x]=find(p,p[x]);
}
int main(){
    
    vector<int>p(N,-1);
    int n,m,a,b,u,v;
    cin>>n>>m>>a>>b;
    
    //節點初始化 ,爲自己的索引
    for(int i=0;i<n;i++){
        p[i]=i;
    }
    //建立並查集
    for(int i=1;i<=m;i++){
        
        cin>>u>>v;
        int fu=find(p,u);
        int fv=find(p,v);
        if(fu!=fv){
            p[fu]=fv;
        }
    }
    int cnt=0;
    //計算有幾個連通量
    for(int i=0;i<n;i++){
        if(p[i]==i){
            cnt++;
        }
    }
    int ans=b+b+(cnt-1)*b+cnt*a;
    printf("%d\n",ans);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章