164572025-05-01 12:53:43peti1234Testvérvárosokcpp17Elfogadva 100/10093ms7856 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int n,k;

vector<vector<pair<int,int>>> g;
vector<int> sz;
vector<bool> iscent;
int res;
void cent(int v, int tsize, int p=-1){
    sz[v]=1;
    for (auto [to, c] : g[v]) {
        if (to==p || iscent[to]) continue;
        cent(to, tsize, v);
        sz[v]+=sz[to];
    }
    if (!res && 2*sz[v]>=tsize) {
        res=v;
    }
}

vector<int> rem, ans;
ll valasz;

void dfs(int v, int d, int p=-1){
    if (iscent[v]) return;
    rem.push_back(d%k);
    for (auto [to,c] : g[v]){
        if (p==to ) continue;

        dfs(to, d+c, v);
    }
}

void solve(int v, int tsize){
    if (iscent[v]) return;
    res=0;
    cent(v,tsize);
    iscent[res]=true;
    // res-re szamolas
    vector<int> change = {0};
    ans[0]=1;  
    for (auto [to,c] : g[res]){
        rem.clear();
        dfs(to, c);
        for (int i : rem){
            change.push_back(i);
            valasz+=ans[(k-i)%k];
        }
        for (int i : rem) ans[i]++;
    }
    for (int i : change) ans[i]=0;

    vector<pair<int,int>> nxt;
    for (auto [to,c] : g[res]) {
        int val=sz[to];
        if (2*val>tsize) {
            val=tsize-sz[res];
        }
        nxt.push_back({to, val});
    }
    for (auto [i,j] : nxt) solve(i,j);
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);

    cin>>n>>k;
    g.resize(n+1);
    sz.resize(n+1);
    iscent.resize(n+1,false);
    ans.resize(k,0);
    for (int i=0;i<n-1;i++){
        int a,b,t;
        cin>>a>>b>>t;
        g[a].push_back({b,t});
        g[b].push_back({a,t});
    }
    solve(1, n);
    cout<<valasz<<"\n";
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms316 KiB
2Elfogadva1ms508 KiB
subtask215/15
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva2ms316 KiB
6Elfogadva2ms316 KiB
7Elfogadva2ms316 KiB
8Elfogadva1ms316 KiB
9Elfogadva2ms316 KiB
subtask315/15
10Elfogadva20ms1332 KiB
11Elfogadva4ms1012 KiB
12Elfogadva90ms4020 KiB
13Elfogadva81ms3704 KiB
14Elfogadva93ms4144 KiB
subtask420/20
15Elfogadva1ms580 KiB
16Elfogadva2ms564 KiB
17Elfogadva8ms1332 KiB
18Elfogadva32ms3848 KiB
19Elfogadva45ms5088 KiB
20Elfogadva63ms6956 KiB
21Elfogadva59ms6520 KiB
22Elfogadva72ms7856 KiB
subtask550/50
23Elfogadva82ms3756 KiB
24Elfogadva43ms2356 KiB
25Elfogadva59ms2868 KiB
26Elfogadva12ms1080 KiB
27Elfogadva41ms2100 KiB
28Elfogadva90ms3956 KiB
29Elfogadva83ms3772 KiB
30Elfogadva85ms3920 KiB
31Elfogadva93ms4088 KiB