#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define mem(a,b) memset(a,b,sizeof(a)) vectorv[100005]; mapmp1,mp2; int t[200005]; int x[3005][3005]; int n,m; int find(int x) { if(x==t[x])return x; return t[x]=find(t[x]); } void check(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy)t[fx]=fy; } int main() { int a,b,c; while (cin >> n >> m) { mem(x,0); mp1.clear(); mp2.clear(); for(int i=1;i<=n;++i) { v[i].clear(); } for(int i=1;i<=n;++i) t[i]=i; for(int i=1;i<=m;++i) { scanf("%d %d %d",&a,&b,&c); x[a][b]+=c; x[b][a]+=c; check(a,b); } for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { if(i==j) continue;; mp1[i]+=x[i][j]; } } for(int i=1;i<=n;++i) { if(mp2[find(i)]) mp2[find(i)]=min(mp2[find(i)],mp1[i]); else mp2[find(i)]=mp1[i]; v[find(i)].push_back(i); } ll sum=0; for(int i=1;i<=n;++i) { if(find(i)==i) if(v[i].size()>1) sum+=mp2[i]; } cout << sum << endl; } return 0; }