int getf(int x){return (f[x]==x)?x:f[x]=getf(f[x]);} void hb(int x,int y){x=getf(x),y=getf(y),f[y]=x;} inline void add(int u,int v,int w,int c); int kruskal() { int num=0;ans=0; for(int i=0;i<=v;i++)f[i]=i; sort(ed+1,ed+num_e+1); for(int i=1;i<=num_e;i++) if(getf(u(i))!=getf(v(i))) { ans+=w(i); hb(u(i),v(i)); if(!c(i))num++; } return num; }