func_code_string: #include <bits/stdc++.h>   using namespace std;   int casex, n, k;   int num, hed[200010], nex[400010], vt[400010];   long long dp[200010][10], sum[200010], ans;   int read() {     int u = 0;     char c = getchar();     while (c <  0  || c >  9 ) c = getchar();     while (c >=  0  && c <=  9 ) u = (u << 1) + (u << 3) + c -  0 , c = getchar();     return u;   }   void add(int x, int y) {     vt[++num] = y, nex[num] = hed[x], hed[x] = num;     vt[++num] = x, nex[num] = hed[y], hed[y] = num;   }   void dfs1(int u, int fa) {     for (int i = hed[u]; i; i = nex[i]) {       if (vt[i] == fa) continue;       dfs1(vt[i], u);       for (int j = 1; j < k; j++) dp[u][j] += dp[vt[i]][j - 1];       sum[u] += sum[vt[i]] + dp[vt[i]][k - 1];       dp[u][0] += dp[vt[i]][k - 1];     }     dp[u][0]++;   }   void dfs2(int u, int fa) {     int tmp1 = dp[u][k - 1], tmp2 = dp[u][max(0, k - 2)];     for (int j = k - 1; j >= 2; j--) dp[u][j] += dp[fa][j - 1] - dp[u][j - 2];     dp[u][1] += dp[fa][0] - tmp1;     dp[u][0] += dp[fa][k - 1] - tmp2;     sum[u] += sum[fa] - sum[u] - tmp1 + dp[fa][k - 1] - tmp2;     for (int i = hed[u]; i; i = nex[i]) {       if (vt[i] == fa) continue;       dfs2(vt[i], u);     }   }   int main() {     n = read(), k = read();     for (int i = 1; i <= n - 1; i++) {       int x = read(), y = read();       add(x, y);     }     dfs1(1, 0);     for (int i = hed[1]; i; i = nex[i]) dfs2(vt[i], 1);     for (int i = 1; i <= n; i++) {       ans += sum[i];       for (int j = 1; j < k; j++) ans += dp[i][j];     }     printf( %lld , ans / 2);   }   