102012024-03-29 13:27:52111Testvérvárosokcpp17Hibás válasz 0/1001.575s41996 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%K+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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1696 KiB
2Elfogadva3ms1880 KiB
subtask20/15
3Hibás válasz3ms2088 KiB
4Elfogadva3ms2156 KiB
5Hibás válasz4ms2528 KiB
6Elfogadva4ms2848 KiB
7Elfogadva4ms3032 KiB
8Elfogadva3ms2784 KiB
9Hibás válasz4ms2988 KiB
subtask30/15
10Hibás válasz363ms6248 KiB
11Elfogadva24ms5284 KiB
12Időlimit túllépés1.575s8404 KiB
13Időlimit túllépés1.559s7400 KiB
14Időlimit túllépés1.567s7716 KiB
subtask40/20
15Hibás válasz3ms3528 KiB
16Hibás válasz3ms4100 KiB
17Hibás válasz9ms7848 KiB
18Hibás válasz39ms20668 KiB
19Hibás válasz87ms27940 KiB
20Hibás válasz230ms37496 KiB
21Időlimit túllépés1.536s17708 KiB
22Hibás válasz103ms41996 KiB
subtask50/50
23Hibás válasz101ms15720 KiB
24Hibás válasz50ms10268 KiB
25Hibás válasz70ms13084 KiB
26Hibás válasz23ms6632 KiB
27Hibás válasz52ms10720 KiB
28Hibás válasz136ms17168 KiB
29Hibás válasz98ms16132 KiB
30Időlimit túllépés1.567s8792 KiB
31Hibás válasz115ms17688 KiB