#include #include #include using namespace std; int N; vector >G[2<<17]; int ch[2<<17],Xr[2<<17]; int add[2<<17]; mapret; int dfs(int u,int p,int xr) { Xr[u]=xr; ch[u]=1; mapnow; for(pair&e:G[u]) { int v=e.first; if(v==p)continue; ch[u]+=dfs(v,u,xr^e.second); e.second=ret[Xr[u]]; if(now.size()p:ret)now[p.first]+=p.second; } ret.swap(now); add[u]=ch[u]-ret[Xr[u]]; ret[Xr[u]]=ch[u]; return ch[u]; } long ans; void dfs2(int u,int p) { int tmp=ret[Xr[u]]; ans-=tmp-add[u]; for(paire:G[u]) { int v=e.first; if(v==p)continue; ret[Xr[u]]=e.second+N-ch[v]; dfs2(v,u); } ret[Xr[u]]=tmp; } main() { cin>>N; for(int i=1;i>a>>b>>c; a--,b--; G[a].push_back(make_pair(b,c)); G[b].push_back(make_pair(a,c)); } dfs(0,-1,0); ans=(long)N*(N-1); dfs2(0,-1); cout<