/*
Kruskal模板
*/
struct edge{
int from;
int to;
int next;
int value;
bool operator<(const edge a) const{
return value<a.value ;
}
};
const int inf=0x3f3f3f3f;
inline int find(int k){
if(k==f[k]) return k;
else return f[k]=find(f[k]);
}
inline int merge(int a,int b){
if(find(a)!=find(b))
return f[find(a)]=find(b);
}
inline void Kruskal(){
sort(edge,edge+m);
memset(dis,inf,sizeof(dis));
for(int i=1;i<=m;i++){
if(t==n-1) break;
int u=edge[i].from ;
int v=edge[i].to ;
if(find(u)!=find(v)){
merge(u,v);
ans+=edge[i].value ;
++t;
}
}
}