162872025-04-20 10:37:48HoraTestvérvárosokcpp17Elfogadva 100/1001.386s174132 KiB
#include <bits/stdc++.h>
using namespace std;

vector<vector<array<int, 2>>> g;
long long n, k, ans = 0;
vector<vector<int>> a;

void dfs(int v, int p){
    a[v][0] = 1;
    for(auto [x, w] : g[v]){
        if(x == p) continue;
        dfs(x, v);
        for(int i = 0; i < k; i++){
            ans += (long long)a[x][i] * (long long)a[v][(4 * k - i - w) % k];
        }
        for(int i = 0; i < k; i++){
            a[v][(i + w) % k] += a[x][i];
        }
    }
}

int main() {
    cin >> n >> k;
    g.resize(n + 1);
    a.resize(n + 1, vector<int>(k, 0));
    for(int i = 0; i < n - 1; i++){
        int b, c, d;
        cin >> b >> c >> d;
        g[b].push_back({c, d % k});
        g[c].push_back({b, d % k});
    }
    dfs(1, 0);
    cout << ans << "\n";
    /*for(auto x : a){
        for(auto y : x) cout << y << " ";
        cout << "\n";
    }*/

}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
subtask215/15
3Elfogadva2ms564 KiB
4Elfogadva1ms316 KiB
5Elfogadva4ms776 KiB
6Elfogadva20ms2988 KiB
7Elfogadva2ms316 KiB
8Elfogadva14ms2080 KiB
9Elfogadva4ms900 KiB
subtask315/15
10Elfogadva16ms1848 KiB
11Elfogadva4ms820 KiB
12Elfogadva64ms5940 KiB
13Elfogadva61ms5312 KiB
14Elfogadva71ms6048 KiB
subtask420/20
15Elfogadva6ms1044 KiB
16Elfogadva30ms4148 KiB
17Elfogadva93ms12132 KiB
18Elfogadva347ms45552 KiB
19Elfogadva248ms32820 KiB
20Elfogadva222ms28212 KiB
21Elfogadva54ms7988 KiB
22Elfogadva1.363s174132 KiB
subtask550/50
23Elfogadva1.054s128564 KiB
24Elfogadva615ms75316 KiB
25Elfogadva601ms75596 KiB
26Elfogadva240ms31028 KiB
27Elfogadva405ms51252 KiB
28Elfogadva363ms42956 KiB
29Elfogadva1.386s171572 KiB
30Elfogadva61ms5684 KiB
31Elfogadva1.187s150068 KiB