Submission
Status:
[PPPPPPPPPP]
Subtask/Task Score:
{100/100}
Score: 100
User: erng
Problemset: รัฐบาล
Language: cpp
Time: 0.005 second
Submitted On: 2026-03-08 22:23:18
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll nx=105;
ll n, m, x, y, z, dsu[nx], l[nx][nx], ans, c, use[nx], ans2, cnt, second;
// priority_queue<tuple<ll,ll,ll>, vector<tuple<ll,ll,ll>>, greater<tuple<ll,ll,ll>>> pq;
vector<tuple<ll,ll,ll>> edges;
vector<ll> used;
int find(int x)
{
if (dsu[x]==x) return x;
else return dsu[x]=find(dsu[x]);
}
int main()
{
cin>>n>>m;
for (int i=1; i<=n; i++) dsu[i]=i;
for (int i=1; i<=m; i++)
{
cin>>x>>y>>z;
edges.push_back({z, x, y});
}
sort(edges.begin(), edges.end());
for (int i=0; i<edges.size(); i++)
{
auto [w, u, v]=edges[i];
if (find(u)==find(v)) continue;
ans+=w;
dsu[find(u)]=dsu[find(v)];
used.push_back(i);
}
second=4e18;
for (int i=0; i<used.size(); i++)
{
cnt=0, ans2=0;
for (int j=1; j<=n; j++) dsu[j]=j;
for (int j=0; j<edges.size(); j++)
{
if (j==used[i]) continue;
auto [w, u, v]=edges[j];
if (find(u)==find(v)) continue;
dsu[find(u)]=dsu[find(v)];
ans2+=w;
cnt++;
}
if (cnt==n-1) second=min(second, ans2);
}
cout<<ans<<" "<<second;
}