10200 2024. 03. 29 13:21:24 111 Testvérvárosok cpp17 Hibás válasz 0/100 1.6s 47908 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)->multiset<int>{
		multiset<int>s;
		for(auto[j,d]:g[i]){
			if(j==p){
				continue;
			}
			auto z=self(self,j,i,x+d);
			ans+=z.count((K-x%K)%K);
			if(z.size()>s.size()){
				swap(s,z);
			}
			for(int y:z){
				ans+=s.count((K-(y-x)%K)%K);
			}
			s.insert(z.begin(),z.end());
		}
		s.insert(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 0/15
3 Hibás válasz 3ms 2284 KiB
4 Elfogadva 3ms 2492 KiB
5 Hibás válasz 4ms 3080 KiB
6 Elfogadva 3ms 3104 KiB
7 Elfogadva 4ms 3260 KiB
8 Elfogadva 3ms 3304 KiB
9 Hibás válasz 4ms 3820 KiB
subtask3 0/15
10 Hibás válasz 361ms 7012 KiB
11 Elfogadva 24ms 6160 KiB
12 Időlimit túllépés 1.6s 9712 KiB
13 Időlimit túllépés 1.559s 9404 KiB
14 Időlimit túllépés 1.574s 10620 KiB
subtask4 0/20
15 Hibás válasz 3ms 6252 KiB
16 Hibás válasz 4ms 6764 KiB
17 Hibás válasz 9ms 10844 KiB
18 Hibás válasz 39ms 23972 KiB
19 Hibás válasz 86ms 31924 KiB
20 Hibás válasz 226ms 42112 KiB
21 Időlimit túllépés 1.582s 22884 KiB
22 Hibás válasz 101ms 47908 KiB
subtask5 0/50
23 Hibás válasz 98ms 22152 KiB
24 Hibás válasz 50ms 17372 KiB
25 Hibás válasz 68ms 20556 KiB
26 Hibás válasz 23ms 13960 KiB
27 Hibás válasz 50ms 18564 KiB
28 Hibás válasz 133ms 25632 KiB
29 Hibás válasz 101ms 25572 KiB
30 Időlimit túllépés 1.547s 19008 KiB
31 Hibás válasz 108ms 28688 KiB