Submission

Status:
[-SSSSSSSSS]

Score: 0

User: a0ms1n

Problemset: รัฐบาล

Language: cpp

Time: 0.002 second

Submitted On: 2025-04-19 19:50:22

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

int n,m;
vector<pair<int,pair<int,int>>> V;
vector<int> parent;

int find(int a){
    if(parent[a]==a)return a;
    return parent[a] = find(parent[a]);
}

vector<int> used_edge;

int MST(int x=-1){
    int cnt = 0;
    int sum = 0;
    iota(parent.begin(),parent.end(),0);
    for(int i=0;i<m && cnt<n-1;i++){
        if(x==i)continue;
        auto [w,p] = V[i];
        auto [u,v] = p;
        if(find(u) != find(v)){
            cnt++;
            sum += w;
            parent[find(u)] = find(v);
            used_edge.push_back(i);
        }
    }
    return sum;
}

signed main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    cin>>n>>m;
    parent.resize(n+1);
    for(int i=0;i<m;i++){
        int u,v,w;cin>>u>>v>>w;
        V.push_back({w,{u,v}});
    }
    sort(V.begin(),V.end());
    int d1 = MST();
    int d2 = LLONG_MAX;
    for(int c:used_edge){
        //cout<<MST(c)<<'\n';
        d2 = min(d2,MST(c));
    }
    cout<<d1<<' '<<d2;


    return 0;
}