#pragma GCC optimize("Ofast") #pragma GCC target("avx2") #define rd(v) long v=0;{long _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} #define wt(v) {ulong _z=v;do*--wp=_z%10+48;while(_z/=10);} #define rep(v,e) for(long v=0;v=0) t=b; while(b=ufbuf[a],b>=0) ufbuf[a]=t,a=b; return t; } struct { int a,b; unsigned c; } abc[100000]; long f1(){ char*mmap(); char*rp=mmap(0l,1l<<25,1,2,0,0ll); rd(n); rep(i,n-1){ { rd(a); abc[i].a=a; } { rd(b); abc[i].b=b; } { rd(c); abc[i].c=c; } } return n; } long f2(long n){ long z=0; for(unsigned m=1<<30;m;m>>=1){ z<<=1; rep(i,n+1){ ufbuf[i]=-1; } rep(i,n-1){ if(abc[i].c&m){ int a=uf_root(abc[i].a); int b=uf_root(abc[i].b); z+=ufbuf[a]*ufbuf[b]; if(ufbuf[a]