Submission

Status:

[PPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: tull

Problemset: รัฐบาล

Language: cpp

Time: 0.005 second

Submitted On: 2026-06-01 00:33:25

#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define bp '\n'
#define ld long double
#define vp cout<<'\n';
#define all(A) A.begin(),A.end()
using pii=pair<int,int>;
const int MOD=1e9+7;
const int MNLL=-1e18;
const int MXLL=1e18;
const int N=2e5+10;
const string sans[]={"no","yes"};
struct DSU{
    vector<int>par,sz;
    DSU(int n):par(n+10),sz(n+10,1){
        iota(par.begin(),par.end(),0);
    }
    int Find(int a){
        return par[a]==a?a:par[a]=Find(par[a]);
    }
    bool Same(int a,int b){
        return Find(a)==Find(b);
    }
    void Union(int a,int b){
        a=Find(a);
        b=Find(b);
        if(sz[b]>sz[a])swap(a,b);
        par[b]=a;
        sz[a]+=sz[b];
    }
};
vector<int>p;
int n;
int MST(vector<array<int,4>>&edge,int&m,int ban,int mode){
    DSU dsu(111);
    int sum=0,cnt=0;
    for(int i=0;i<m;++i){
        auto[x,l,r,ind]=edge[i];
        if(dsu.Same(l,r) or (ind==ban))continue;
        sum+=x;
        dsu.Union(l,r);
        ++cnt;
        if(mode==1){
            p.emplace_back(ind);
        }
    }
    return (cnt==n-1?sum:MXLL);
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    int m,sum=0,sum2=MXLL,l,r,x;
    cin>>n>>m; // n<=100 m<=10000
    vector<array<int,4>>edge(m);
    for(int i=0;i<m;++i){
        cin>>l>>r>>x;
        if(l>r)swap(l,r);
        edge[i]={x,l,r,i};
    }
    sort(all(edge));
    cout<<MST(edge,m,-1,1)<<' ';
    for(auto&x:p){
        sum2=min(sum2,MST(edge,m,x,0));
    }
    cout<<sum2;
}