10205 2024. 03. 29 13:39:09 111 Testvérvárosok cpp17 Hibás válasz 20/100 71ms 36024 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;
			}
			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 1828 KiB
2 Elfogadva 3ms 2028 KiB
subtask2 0/15
3 Elfogadva 3ms 2248 KiB
4 Elfogadva 3ms 2448 KiB
5 Hibás válasz 3ms 2868 KiB
6 Hibás válasz 3ms 3112 KiB
7 Hibás válasz 3ms 3020 KiB
8 Elfogadva 3ms 3288 KiB
9 Hibás válasz 4ms 3448 KiB
subtask3 0/15
10 Hibás válasz 10ms 5148 KiB
11 Elfogadva 4ms 5380 KiB
12 Hibás válasz 37ms 11304 KiB
13 Hibás válasz 32ms 10784 KiB
14 Hibás válasz 37ms 11768 KiB
subtask4 20/20
15 Elfogadva 3ms 4052 KiB
16 Elfogadva 3ms 4564 KiB
17 Elfogadva 8ms 7616 KiB
18 Elfogadva 21ms 18272 KiB
19 Elfogadva 28ms 24508 KiB
20 Elfogadva 39ms 32428 KiB
21 Elfogadva 32ms 30180 KiB
22 Elfogadva 48ms 36024 KiB
subtask5 0/50
23 Hibás válasz 64ms 12248 KiB
24 Hibás válasz 37ms 8604 KiB
25 Hibás válasz 46ms 9520 KiB
26 Hibás válasz 18ms 5752 KiB
27 Hibás válasz 35ms 8876 KiB
28 Hibás válasz 61ms 12124 KiB
29 Hibás válasz 67ms 11732 KiB
30 Hibás válasz 32ms 11084 KiB
31 Hibás válasz 71ms 12900 KiB