91942024-02-17 21:59:27CWMTestvérvárosokcpp17Hibás válasz 35/10059ms20648 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

int main()
{
	int n, k;
	cin >> n >> k;
	vector<vector<pair<int,int>>> g(n);
	vector<int> modDist(n);
	vector<bool> visited(n);
	for (size_t i = 0; i < n-1; i++)
	{
		int a, b, w;
		cin >> a >> b >> w;
		a--; b--;
		g[a].push_back({ b,w });
		g[b].push_back({ a,w });
	}
	visited[0] = true;
	queue<int> BFS;
	BFS.push(0);
	while (!BFS.empty())
	{
		int node = BFS.front();
		BFS.pop();
		for (size_t i = 0; i < g[node].size(); i++)
		{
			if (!visited[g[node][i].first]) {
				visited[g[node][i].first] = true;
				modDist[g[node][i].first] = (modDist[node] + g[node][i].second)%k;
				BFS.push(g[node][i].first);
			}
		}
	}
	vector<int> kBuckets(k);
	for (size_t i = 0; i < n; i++)
	{
		kBuckets[modDist[i]]++;
	}
	long long res = 0;
	for (size_t i = 0; i < kBuckets.size(); i++)
	{
		int cnt = kBuckets[i];
		res += (cnt * (cnt - 1) / 2);
	}
	cout << res;
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1812 KiB
2Hibás válasz3ms2068 KiB
subtask20/15
3Hibás válasz3ms2276 KiB
4Elfogadva3ms2360 KiB
5Hibás válasz3ms2784 KiB
6Hibás válasz3ms3108 KiB
7Elfogadva3ms3324 KiB
8Hibás válasz3ms3352 KiB
9Hibás válasz4ms3700 KiB
subtask315/15
10Elfogadva16ms5020 KiB
11Elfogadva4ms4148 KiB
12Elfogadva57ms10864 KiB
13Elfogadva52ms10880 KiB
14Elfogadva59ms12488 KiB
subtask420/20
15Elfogadva3ms6212 KiB
16Elfogadva3ms6252 KiB
17Elfogadva8ms7164 KiB
18Elfogadva26ms9292 KiB
19Elfogadva35ms10848 KiB
20Elfogadva48ms13020 KiB
21Elfogadva45ms13244 KiB
22Elfogadva54ms15116 KiB
subtask50/50
23Hibás válasz52ms15716 KiB
24Hibás válasz30ms13560 KiB
25Hibás válasz39ms15100 KiB
26Hibás válasz12ms12736 KiB
27Hibás válasz28ms14544 KiB
28Hibás válasz57ms18320 KiB
29Hibás válasz54ms18548 KiB
30Elfogadva54ms19236 KiB
31Hibás válasz59ms20648 KiB