Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #define M_PI 3.14159265358979323846
- typedef long long ll;
- typedef long double ld;
- #include<vector>
- #include<string>
- #include<algorithm>
- #include<iostream>
- #include<map>
- #include<set>
- #include<queue>
- #include<stack>
- #include<iomanip>
- #include<math.h>
- #include <string>
- #include<cmath>
- #include<functional>
- #include<fstream>
- #include<unordered_set>
- #include<unordered_map>
- using namespace std;
- ll INF = 1e9;
- map<int, int>p[100001];
- int parent(int color, int v) {
- return p[color].find(v) == p[color].end() ? v : p[color][v] = parent(color, p[color][v]);
- }
- void unite(int a, int b, int color) {
- if (rand() % 2)
- swap(a, b);
- a = parent(color, a);
- b = parent(color, b);
- p[color][a] = b;
- }
- int main()
- {
- cin.tie(0);
- cout.tie(0);
- ios_base::sync_with_stdio(false);
- int n, m;
- cin >> n >> m;
- vector<vector<int>>v(n + 1);
- for (int i = 0; i < m; i++) {
- int a, b, c;
- cin >> a >> b >> c;
- unite(a, b, c);
- v[a].push_back(c);
- v[b].push_back(c);
- }
- for (int i = 1; i <= n; i++) {
- sort(v[i].begin(), v[i].end());
- v[i].erase(unique(v[i].begin(), v[i].end()), v[i].end());
- }
- int q;
- cin >> q;
- //map<pair<int, int>, int>ans;
- for (int i = 0; i < q; i++) {
- int a, b;
- cin >> a >> b;
- vector<int>colors;
- if (v[a].size() < v[b].size())
- colors = v[a];
- else
- colors = v[b];
- int sum = 0;
- for (auto c : colors) {
- if (parent(c, a) == parent(c, b))
- sum++;
- }
- cout << sum << '\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement