#include<iostream>#include<algorithm>usingnamespace std;constint N =10005, M =500005, INF =0x3f3f3f3f;int n, m, p[N];structEdge{int u, v, w;booloperator<(const Edge &W)const{return w < W.w;}}edges[M];intfind(int x){if(p[x]!= x) p[x]=find(p[x]);return p[x];}intkruskal(){sort(edges, edges + m);for(int i =1; i <= n; i ++) p[i]= i;int res =0, cnt =0;for(int i =0; i < m; i ++){int u = edges[i].u, v = edges[i].v, w = edges[i].w;
u =find(u); v =find(v);if(u != v){
res += w;
p[u]= v;
cnt ++;}}// 加入的边不等于n-1 if(cnt != n -1)return INF;elsereturn res;}intmain(){scanf("%d%d",&n,&m);for(int i =0; i < m; i ++){int u, v, w;scanf("%d%d%d",&u,&v,&w);if(u != v){// 最好去掉自环
edges[i]={u, v, w};}}int ans =kruskal();if(ans == INF)printf("orz\n");elseprintf("%d\n", ans);return0;}