#include<bits/stdc++.h> usingnamespace std; #define int long long inlineintread(){int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+ (x<<3)+(ch^48);ch=getchar();}return x*f;} #define Z(x) (x)*(x) #define pb push_back //#define M //#define mo #define N 100010 int n, m, i, j, k, T; int ans, son[N], w[N], a[N], c[N], p[N], u, v, sum; int dfn[N], L[N], R[N], tot; vector<int>G[N]; int s[2][N*20];
//void dfs_clear(int x, int fa) { // // for(int y : G[x]) // if(y != fa) dfs_clear(y, x); //}
//void dfs3(int x, int fa, int k) { //// printf("%lld : %lld => %lld | %lld\n", x, c[x], c[x]^k, s[a[x]^1][c[x]^k]); // ans += s[a[x]^1][c[x]^k]; // for(int y : G[x]) // if(y != fa) dfs3(y, x, k); //} // //void dfs4(int x, int fa) { // s[a[x]][c[x]] ++ ; // for(int y : G[x]) if(y != fa) dfs4(y, x); //}
voiddfs2(int x, int fa){ int p; for(int y : G[x]) if(y != fa && y != son[x]) { dfs2(y, x); for(int k = L[y]; k <= R[y]; ++k) p = dfn[k], s[a[p]][c[p]] = 0; } if(son[x]) dfs2(son[x], x); for(int y : G[x]) if(y != fa && y != son[x]) { for(int k = L[y]; k <= R[y]; ++k) p = dfn[k], ans += s[a[p]^1][c[p]^c[x]]; for(int k = L[y]; k <= R[y]; ++k) p = dfn[k], s[a[p]][c[p]] ++ ; } // for(int y : G[x]) if(y != fa && y != son[x]) s[a[x]][c[x]]++; }