Submission

Status:
[PP-SSSSSSS]

Score: 0

User: meme_boi2

Problemset: รัฐบาล

Language: cpp

Time: 0.002 second

Submitted On: 2025-04-19 19:26:10

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
#define pii pair<int,int>
#define tii tuple<int,int,int>
//priority_queue<tii,vector<tii>,greater<tii>> pq;
bool comp(tii a, tii b){
    return get<2>(a) < get<2> (b);
}
vector<int> pa(102);
int n, m;
int find(int i){
    if(pa[i] == i) return i;
    else return pa[i] = find(pa[i]);
}
void U(int u,int v){
    u = find(u), v = find(v);
    if(u > v) pa[v] = u;
    else pa[u] = v;
}
int calculate_MST(int X,vector<tii> path){
    for(int i = 1; i <= n; i++) pa[i] = i;
    int cut = 0, idx = 0, MisterO = 0;
    while(cut != n-1 && idx < m){
        auto [u,v,w] = path[idx];
        idx++;
        if(idx == X) continue;
        if(find(u) != find(v)){
            cut++;
            U(u,v);
            MisterO+=w;
        }
    }
    return MisterO;
}
int32_t main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    cin >> n >> m;
    for(int i = 1; i <= n; i++) pa[i] = i;
    vector<tii> path(m);
    for(int i = 0; i < m; i++){
        int u,v ,w;
        cin >> u >> v >> w;
        path[i] = {u,v,w};
    }
    sort(path.begin(),path.end(),comp);
    int cut = 0, idx = 0, MisterO = 0;
    while(cut != n-1 && idx < m){
        auto [u,v,w] = path[idx];
        idx++;
        if(find(u) != find(v)){
            cut++;
            U(u,v);
            MisterO+=w;
        }
    }
    int njoop = INT_MAX;
    for(int i = 0; i < m; i++){
        int DevJ = calculate_MST(i,path);
        if(DevJ < njoop && DevJ != MisterO) njoop = DevJ;
    }
    cout << MisterO << ' ' << njoop;
}