10206 2024. 03. 29 13:39:40 111 Testvérvárosok cpp17 Elfogadva 100/100 71ms 36460 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,K;
	cin>>N>>K;
	vector<vector<pair<int,int>>>g(N+1);
	for(int i=0;i<N-1;i++){
		int a,b,d;
		cin>>a>>b>>d;
		g[a].emplace_back(b,d);
		g[b].emplace_back(a,d);
	}
	int ans=0;
	auto dfs=[&](auto self,int i,int p,int x)->map<int,int>{
		map<int,int>s;
		for(auto[j,d]:g[i]){
			if(j==p){
				continue;
			}
			auto z=self(self,j,i,x+d);
			auto q=z.find(x%K);
			if(q!=z.end())ans+=q->second;
			if(z.size()>s.size()){
				swap(s,z);
			}
			for(auto[y,c]:z){
				auto q=s.find(((x*2-y)%K+K)%K);
				if(q!=s.end())ans+=q->second*c;
			}
			for(auto[y,c]:z){
				s[y]+=c;
			}
		}
		s[x%K]++;
		return s;
	};
	dfs(dfs,1,0,0);
	cout<<ans<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1824 KiB
2 Elfogadva 3ms 2072 KiB
subtask2 15/15
3 Elfogadva 3ms 2244 KiB
4 Elfogadva 3ms 2456 KiB
5 Elfogadva 3ms 2872 KiB
6 Elfogadva 4ms 3164 KiB
7 Elfogadva 3ms 3328 KiB
8 Elfogadva 3ms 3604 KiB
9 Elfogadva 4ms 3908 KiB
subtask3 15/15
10 Elfogadva 10ms 5752 KiB
11 Elfogadva 4ms 5936 KiB
12 Elfogadva 48ms 11768 KiB
13 Elfogadva 32ms 11456 KiB
14 Elfogadva 39ms 12192 KiB
subtask4 20/20
15 Elfogadva 3ms 4732 KiB
16 Elfogadva 3ms 5184 KiB
17 Elfogadva 8ms 8240 KiB
18 Elfogadva 23ms 18892 KiB
19 Elfogadva 29ms 25136 KiB
20 Elfogadva 39ms 32868 KiB
21 Elfogadva 32ms 30592 KiB
22 Elfogadva 48ms 36460 KiB
subtask5 50/50
23 Elfogadva 64ms 12656 KiB
24 Elfogadva 37ms 9076 KiB
25 Elfogadva 46ms 9924 KiB
26 Elfogadva 18ms 6368 KiB
27 Elfogadva 35ms 9388 KiB
28 Elfogadva 59ms 12528 KiB
29 Elfogadva 67ms 12252 KiB
30 Elfogadva 34ms 11600 KiB
31 Elfogadva 71ms 13312 KiB