#include <bits/stdc++.h>
#define NMAX 100005
#define LOG 18
using namespace std;
//kiểm tra:
//tên file đọc tệp
//mod,hằng số
//tràn số ,tràn bộ nhớ ,truy cập ko hợp lệ
struct edge{
int u;
int v;
int w;
};
int n,m;
int high[NMAX],LCA[NMAX][LOG+1],minimum[NMAX][LOG+1];
vector<pair<int,int>> MST[NMAX];
edge graph[NMAX];
long long result=0;
struct create{
int leng;
vector<int> DSU,sizeDSU;
create(int _n):leng(_n),DSU(leng+1),sizeDSU(leng+1)
{
for(int i=1;i<=leng;i++)
{
DSU[i]=i;
sizeDSU[i]=1;
}
};
int find_root(int u)
{
return (DSU[u]==u)?u:DSU[u]=find_root(DSU[u]);
}
bool join(int u ,int v)
{
int root_u=find_root(u);
int root_v=find_root(v);
if(root_u==root_v) return false;
if(sizeDSU[root_u]<sizeDSU[root_v]) swap(root_u,root_v);
DSU[root_v]=root_u;
sizeDSU[root_u]+=sizeDSU[root_v];
return true;
}
};
void enter()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>graph[i].u>>graph[i].v>>graph[i].w;
}
}
void createMST()
{
create dsu(n);
sort(graph+1,graph+m+1,[](edge&a,edge&b){return a.w>b.w;});
for(int i=1;i<=m;i++)
{
int u=graph[i].u;
int v=graph[i].v;
int w=graph[i].w;
if(dsu.join(u,v))
{
MST[u].push_back({v,w});
MST[v].push_back({u,w});
}
}
}
void DFS(int node)
{
for(pair<int,int> u:MST[node])
{
if(LCA[node][0]!=u.first)
{
LCA[u.first][0]=node;
high[u.first]=high[node]+1;
minimum[u.first][0]=u.second;
DFS(u.first);
}
}
}
void createLCA()
{
for(int j=1;j<=LOG;j++)
{
for(int i=1;i<=n;i++)
{
LCA[i][j]=LCA[LCA[i][j-1]][j-1];
minimum[i][j]=min(minimum[i][j-1],minimum[LCA[i][j-1]][j-1]);
}
}
high[0]=-1;
}
int binary_lifting(int u ,int v)
{
if(high[u]<high[v])
{
swap(u,v);
}
int ans=INT_MAX;
for(int i=LOG;i>=0;i--)
{
if(high[LCA[u][i]]>=high[v])
{
ans=min(ans,minimum[u][i]);
u=LCA[u][i];
}
}
if(u==v) return ans;
for(int i=LOG;i>=0;i--)
{
if(LCA[u][i]!=LCA[v][i])
{
ans=min({ans,minimum[u][i],minimum[v][i]});
u=LCA[u][i];
v=LCA[v][i];
}
}
return min({ans,minimum[u][0],minimum[v][0]});
}
void process()
{
for(int i=1;i<=m;i++)
{
result+=max(0,binary_lifting(graph[i].u,graph[i].v)-graph[i].w);
}
cout<<result;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
enter();
createMST();
DFS(1);
createLCA();
process();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgTk1BWCAxMDAwMDUKI2RlZmluZSBMT0cgMTgKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy9raeG7g20gdHJhOgovL3TDqm4gZmlsZSDEkeG7jWMgdOG7h3AKLy9tb2QsaOG6sW5nIHPhu5EKLy90csOgbiBz4buRICx0csOgbiBi4buZIG5o4bubICx0cnV5IGPhuq1wIGtvIGjhu6NwIGzhu4cKc3RydWN0IGVkZ2V7CiAgICBpbnQgdTsKICAgIGludCB2OwogICAgaW50IHc7Cgp9OwppbnQgbixtOwppbnQgaGlnaFtOTUFYXSxMQ0FbTk1BWF1bTE9HKzFdLG1pbmltdW1bTk1BWF1bTE9HKzFdOwp2ZWN0b3I8cGFpcjxpbnQsaW50Pj4gTVNUW05NQVhdOwplZGdlIGdyYXBoW05NQVhdOwpsb25nIGxvbmcgcmVzdWx0PTA7CnN0cnVjdCBjcmVhdGV7CiAgIGludCBsZW5nOwogICB2ZWN0b3I8aW50PiBEU1Usc2l6ZURTVTsKICAgY3JlYXRlKGludCBfbik6bGVuZyhfbiksRFNVKGxlbmcrMSksc2l6ZURTVShsZW5nKzEpCiAgIHsKICAgICAgIGZvcihpbnQgaT0xO2k8PWxlbmc7aSsrKQogICAgICAgewogICAgICAgICAgIERTVVtpXT1pOwogICAgICAgICAgIHNpemVEU1VbaV09MTsKICAgICAgIH0KICAgfTsKICAgaW50IGZpbmRfcm9vdChpbnQgdSkKICAgewogICAgICAgcmV0dXJuIChEU1VbdV09PXUpP3U6RFNVW3VdPWZpbmRfcm9vdChEU1VbdV0pOwogICB9CiAgIGJvb2wgam9pbihpbnQgdSAsaW50IHYpCiAgIHsKICAgICAgIGludCByb290X3U9ZmluZF9yb290KHUpOwogICAgICAgaW50IHJvb3Rfdj1maW5kX3Jvb3Qodik7CiAgICAgICBpZihyb290X3U9PXJvb3RfdikgcmV0dXJuIGZhbHNlOwogICAgICAgaWYoc2l6ZURTVVtyb290X3VdPHNpemVEU1Vbcm9vdF92XSkgIHN3YXAocm9vdF91LHJvb3Rfdik7CiAgICAgICBEU1Vbcm9vdF92XT1yb290X3U7CiAgICAgICBzaXplRFNVW3Jvb3RfdV0rPXNpemVEU1Vbcm9vdF92XTsKICAgICAgIHJldHVybiB0cnVlOwogICB9Cn07CnZvaWQgZW50ZXIoKQp7CiAgICBjaW4+Pm4+Pm07CiAgICBmb3IoaW50IGk9MTtpPD1tO2krKykKICAgIHsKICAgICAgICBjaW4+PmdyYXBoW2ldLnU+PmdyYXBoW2ldLnY+PmdyYXBoW2ldLnc7CiAgICB9CgoKfQp2b2lkIGNyZWF0ZU1TVCgpCnsKICAgIGNyZWF0ZSBkc3Uobik7CiAgICBzb3J0KGdyYXBoKzEsZ3JhcGgrbSsxLFtdKGVkZ2UmYSxlZGdlJmIpe3JldHVybiBhLnc+Yi53O30pOwogICAgZm9yKGludCBpPTE7aTw9bTtpKyspCiAgICB7CiAgICAgICAgaW50IHU9Z3JhcGhbaV0udTsKICAgICAgICBpbnQgdj1ncmFwaFtpXS52OwogICAgICAgIGludCB3PWdyYXBoW2ldLnc7CiAgICAgICAgaWYoZHN1LmpvaW4odSx2KSkKICAgICAgICB7CiAgICAgICAgICAgIE1TVFt1XS5wdXNoX2JhY2soe3Ysd30pOwogICAgICAgICAgICBNU1Rbdl0ucHVzaF9iYWNrKHt1LHd9KTsKICAgICAgICB9CiAgICB9Cn0Kdm9pZCBERlMoaW50IG5vZGUpCnsKICAgIGZvcihwYWlyPGludCxpbnQ+IHU6TVNUW25vZGVdKQogICAgewogICAgICAgIGlmKExDQVtub2RlXVswXSE9dS5maXJzdCkKICAgICAgICB7CiAgICAgICAgICAgIExDQVt1LmZpcnN0XVswXT1ub2RlOwogICAgICAgICAgICBoaWdoW3UuZmlyc3RdPWhpZ2hbbm9kZV0rMTsKICAgICAgICAgICAgbWluaW11bVt1LmZpcnN0XVswXT11LnNlY29uZDsKICAgICAgICAgICAgREZTKHUuZmlyc3QpOwogICAgICAgIH0KICAgIH0KfQp2b2lkIGNyZWF0ZUxDQSgpCnsKICAgIGZvcihpbnQgaj0xO2o8PUxPRztqKyspCiAgICB7CiAgICAgICAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICAgICAgewogICAgICAgICAgICBMQ0FbaV1bal09TENBW0xDQVtpXVtqLTFdXVtqLTFdOwogICAgICAgICAgICBtaW5pbXVtW2ldW2pdPW1pbihtaW5pbXVtW2ldW2otMV0sbWluaW11bVtMQ0FbaV1bai0xXV1bai0xXSk7CiAgICAgICAgfQogICAgfQogICAgaGlnaFswXT0tMTsKfQppbnQgYmluYXJ5X2xpZnRpbmcoaW50IHUgLGludCB2KQp7CiAgICBpZihoaWdoW3VdPGhpZ2hbdl0pCiAgICB7CiAgICAgICAgc3dhcCh1LHYpOwogICAgfQogICAgaW50IGFucz1JTlRfTUFYOwogICAgZm9yKGludCBpPUxPRztpPj0wO2ktLSkKICAgIHsKICAgICAgICBpZihoaWdoW0xDQVt1XVtpXV0+PWhpZ2hbdl0pCiAgICAgICAgewogICAgICAgICAgICBhbnM9bWluKGFucyxtaW5pbXVtW3VdW2ldKTsKICAgICAgICAgICAgdT1MQ0FbdV1baV07CiAgICAgICAgfQogICAgfQogICAgaWYodT09dikgcmV0dXJuIGFuczsKICAgIGZvcihpbnQgaT1MT0c7aT49MDtpLS0pCiAgICB7CiAgICAgICAgaWYoTENBW3VdW2ldIT1MQ0Fbdl1baV0pCiAgICAgICAgewogICAgICAgICAgICBhbnM9bWluKHthbnMsbWluaW11bVt1XVtpXSxtaW5pbXVtW3ZdW2ldfSk7CiAgICAgICAgICAgIHU9TENBW3VdW2ldOwogICAgICAgICAgICB2PUxDQVt2XVtpXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbWluKHthbnMsbWluaW11bVt1XVswXSxtaW5pbXVtW3ZdWzBdfSk7Cn0Kdm9pZCBwcm9jZXNzKCkKewogICAgZm9yKGludCBpPTE7aTw9bTtpKyspCiAgICB7CiAgICAgICAgcmVzdWx0Kz1tYXgoMCxiaW5hcnlfbGlmdGluZyhncmFwaFtpXS51LGdyYXBoW2ldLnYpLWdyYXBoW2ldLncpOwogICAgfQogICAgY291dDw8cmVzdWx0Owp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKICAgIGVudGVyKCk7CiAgICBjcmVhdGVNU1QoKTsKICAgIERGUygxKTsKICAgIGNyZWF0ZUxDQSgpOwogICAgcHJvY2VzcygpOwogICAgcmV0dXJuIDA7Cn0K