5115 2023. 04. 17 22:54:57 nmarci Testvérvárosok cpp11 Accepted 100/100 629ms 419940 KiB
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <deque>
#include <queue>
#include <algorithm>

using namespace std;
using ll = long long int;
int k;
vector<pair<int,int>> g[50010];
int dp[50010][1010] = { 0 };
int sol = 0;        //lehet overflow
int mock[1010];
void dfs(int node, int prev = -1) {
    dp[node][0] = 1;
    for (auto i : g[node]) {
        if (i.first != prev) {
            dfs(i.first, node);
            //int mock[1010] = { 0 };
            for(int i = 0; i < 1010; ++i)
            	mock[i] = 0;
            for (int j = 0; j < k; ++j) {
                int kellmeg = (k - ((j + i.second) % k)) % k;
                //cerr << ((j + i.second) % k) << " " << kellmeg << endl;
               // cerr << node << endl;
               // cerr << j << " " << i.second << " " << kellmeg << " " << dp[node][kellmeg] * dp[i.first][j] << endl;
                sol += dp[node][kellmeg] * dp[i.first][j];
                mock[(j + i.second) % k] += dp[i.first][j];
            }
            for (int j = 0; j < k; ++j) {
                dp[node][j] += mock[j];
            }
        }
    }
}

int main()
{
    int n;
    cin >> n >> k;
    for (int i = 0; i < n - 1; ++i) {
        int a, b, t;
        cin >> a >> b >> t;
        g[a].emplace_back(b, t);
        g[b].emplace_back(a, t);
    }
    //cerr << endl << endl;
    dfs(1);
    cout << sol << endl;
    /*for (int i = 1; i <= n; ++i) {
        for (int j = 0; j < k; ++j) {
            cerr << dp[i][j] << " ";
        }
        cerr << endl;
    }*/
    return 0;
}
Subtask Sum Test Verdict Time Memory
subtask1 0/0
1 Accepted 4ms 4356 KiB
2 Accepted 4ms 5312 KiB
subtask2 15/15
3 Accepted 4ms 5380 KiB
4 Accepted 3ms 4780 KiB
5 Accepted 7ms 10632 KiB
6 Accepted 13ms 10608 KiB
7 Accepted 6ms 10840 KiB
8 Accepted 8ms 8964 KiB
9 Accepted 8ms 13916 KiB
subtask3 15/15
10 Accepted 56ms 107864 KiB
11 Accepted 14ms 29144 KiB
12 Accepted 174ms 391388 KiB
13 Accepted 194ms 360248 KiB
14 Accepted 222ms 407432 KiB
subtask4 20/20
15 Accepted 6ms 11360 KiB
16 Accepted 16ms 16908 KiB
17 Accepted 50ms 59280 KiB
18 Accepted 181ms 195204 KiB
19 Accepted 180ms 274440 KiB
20 Accepted 209ms 375392 KiB
21 Accepted 180ms 347788 KiB
22 Accepted 570ms 419940 KiB
subtask5 50/50
23 Accepted 517ms 368716 KiB
24 Accepted 298ms 213244 KiB
25 Accepted 300ms 269012 KiB
26 Accepted 108ms 85064 KiB
27 Accepted 232ms 209420 KiB
28 Accepted 310ms 397148 KiB
29 Accepted 629ms 375376 KiB
30 Accepted 207ms 376964 KiB
31 Accepted 554ms 411176 KiB