102042024-03-29 13:36:20111Testvérvárosokcpp17Hibás válasz 20/10075ms38856 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);
			int q=x%K;
			ans+=z.count(q)?z[q]:0;
			if(z.size()>s.size()){
				swap(s,z);
			}
			for(auto[y,c]:z){
				int q=((x*2-y)%K+K)%K;
				ans+=s.count(q)?s[q]:0;
			}
			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
1Elfogadva3ms1828 KiB
2Elfogadva3ms2068 KiB
subtask20/15
3Elfogadva3ms2288 KiB
4Elfogadva3ms2320 KiB
5Hibás válasz3ms2656 KiB
6Hibás válasz3ms2768 KiB
7Hibás válasz3ms2876 KiB
8Elfogadva3ms2904 KiB
9Hibás válasz3ms3060 KiB
subtask30/15
10Hibás válasz10ms4768 KiB
11Elfogadva4ms4860 KiB
12Hibás válasz37ms10388 KiB
13Hibás válasz32ms10096 KiB
14Hibás válasz37ms10824 KiB
subtask420/20
15Elfogadva3ms3504 KiB
16Elfogadva3ms4256 KiB
17Elfogadva8ms7900 KiB
18Elfogadva25ms19668 KiB
19Elfogadva30ms26248 KiB
20Elfogadva39ms35088 KiB
21Elfogadva30ms32636 KiB
22Elfogadva52ms38856 KiB
subtask50/50
23Hibás válasz68ms12208 KiB
24Hibás válasz39ms8880 KiB
25Hibás válasz48ms9524 KiB
26Hibás válasz19ms5828 KiB
27Hibás válasz37ms8880 KiB
28Hibás válasz64ms12060 KiB
29Hibás válasz71ms11780 KiB
30Hibás válasz32ms11460 KiB
31Hibás válasz75ms12924 KiB