#include <bits/stdc++.h>
using namespace std;
struct DSU{
vector<int>par;
DSU(int n){
par.assign(n + 1, -1);
}
int Find(int u){
if(par[u] < 0)return u;
return par[u] = Find(par[u]);
}
void Union(int u, int v){
u = Find(u);
v = Find(v);
if(u == v)return;
if(par[u] > par[v])swap(u, v);
par[u] += par[v];
par[v] = u;
}
};
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
vector<array<int, 3>>e(m);
for(int i = 0;i < m;++i){
int u, v, w;
cin >> u >> v >> w;
e[i] = {w, u, v};
}
sort(e.rbegin(), e.rend());
int q;
cin >> q;
vector<array<int, 3>>queries(q);
vector<int>ans(q);
for(int i = 0;i < q;++i){
int type, s, w;
cin >> type >> s >> w;
queries[i] = {w, s, i};
}
sort(queries.rbegin(), queries.rend());
int p = 0;
DSU dsu(n);
for(int i = 0;i < q;++i){
int w = queries[i][0], s = queries[i][1], indx = queries[i][2];
while(p < m && w <= e[p][0]){
dsu.Union(e[p][1], e[p][2]);
p++;
}
ans[indx] = -dsu.par[dsu.Find(s)];
}
for(int i = 0;i < q;++i){
cout << ans[i] << '\n';
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |