102032024-03-29 13:35:08111Testvérvárosokcpp17Elfogadva 100/100101ms37932 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);
			ans+=z[x%K];
			if(z.size()>s.size()){
				swap(s,z);
			}
			for(auto[y,c]:z){
				ans+=s[((x*2-y)%K+K)%K]*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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1832 KiB
2Elfogadva3ms2068 KiB
subtask215/15
3Elfogadva3ms2284 KiB
4Elfogadva3ms2608 KiB
5Elfogadva4ms2924 KiB
6Elfogadva4ms3184 KiB
7Elfogadva3ms2888 KiB
8Elfogadva3ms2992 KiB
9Elfogadva4ms3524 KiB
subtask315/15
10Elfogadva10ms4980 KiB
11Elfogadva4ms5000 KiB
12Elfogadva37ms10708 KiB
13Elfogadva32ms10240 KiB
14Elfogadva37ms11260 KiB
subtask420/20
15Elfogadva3ms3892 KiB
16Elfogadva3ms4416 KiB
17Elfogadva8ms7584 KiB
18Elfogadva20ms18828 KiB
19Elfogadva29ms25732 KiB
20Elfogadva37ms34000 KiB
21Elfogadva29ms32004 KiB
22Elfogadva45ms37932 KiB
subtask550/50
23Elfogadva90ms13504 KiB
24Elfogadva52ms9792 KiB
25Elfogadva64ms10568 KiB
26Elfogadva46ms6820 KiB
27Elfogadva48ms10036 KiB
28Elfogadva76ms12864 KiB
29Elfogadva97ms12900 KiB
30Elfogadva32ms11756 KiB
31Elfogadva101ms13964 KiB