#include #include #include #include #include #include using namespace std; using Graph = vector< vector< pair > >; int main() { int N, K; scanf("%d%d", &N, &K); Graph G(N); for(int i=0; i+1 parent(N, -1), par_edge_color(N, -1); vector depth(N); auto dfs = [&](auto&& f, int cur, int par) -> void { for(auto e : G[cur]) { int to, color; tie(to, color) = e; if(to == par) continue; depth[to] = depth[cur] + 1; parent[to] = cur; par_edge_color[to] = color; f(f, to, cur); } }; dfs(dfs, 0, -1); long long int ans = 0; for(int i=0; i S; while(u != v) { if(depth[u] != depth[v]) { if(depth[u] > depth[v]) swap(u, v); S.emplace(par_edge_color[v]); v = parent[v]; } else { S.emplace(par_edge_color[u]); S.emplace(par_edge_color[v]); u = parent[u]; v = parent[v]; } } if(S.size() == 2) { fprintf(stderr, "u = %d, v = %d\n", i+1, j+1); ans++; } } } printf("%lld\n", ans); return 0; }