#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<sstream>
using namespace std;
#define L 101
#define MAX 0x3f
int n,k;
int father[L];
int begin,end,len,k1,k2;
struct way{
int begin;
int end;
int len;
}w[L];
int tot=0,sum=0;
bool comp(way &a,way &b){ //传址!
return a.len < b.len;
}
int find(int k){
if(father[k]!=k){father[k]=find(father[k]);}
return father[k]; //更新后,递归回传
}
void unity(int k1,int k2){
father[k2]=k1;
}
int main()
{
cin >> n >> k;
//1.初始化路径
for(int i=1;i<=k;i++){
cin >> w[i].begin >> w[i].end >> w[i].len;
sum+=w[i].len;
}
//2.初始化并查集
for(int i=1;i<=n;i++){
father[i]=i;
}
//3.最小生成树
sort(w+1,w+k+1,comp); //下标从1开始
for(int i=1;i<=k;i++){
k1=find(w[i].begin);
k2=find(w[i].end);
if(k1!=k2){
unity(k1,k2); //记住,是修改代表!
tot+=w[i].len;
}
if(k==n-1)break;
}
cout << sum-tot; //补集思想
return 0;
}
/*
5 5
1 2 8
1 3 1
1 5 3
2 4 5
3 4 2
*/
//cout << "输入:"
结果: