#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAXN = 5e4 + 10;
struct DSU
{
int leader[MAXN];
int sz[MAXN];
DSU(){};
void init(int n)
{
for(int i = 1; i <= n; i++)
{
leader[i] = i;
sz[i] = 1;
}
}
int findLeader(int u)
{
return leader[u] == u ? u : leader[u] = findLeader(leader[u]);
}
bool connected(int u, int v)
{
return findLeader(u) == findLeader(v);
}
void unite(int u, int v)
{
if(connected(u, v))
return;
u = findLeader(u);
v = findLeader(v);
if(sz[u] < sz[v])
swap(u, v);
sz[u] += sz[v];
leader[v] = u;
}
int query(int u)
{
return sz[findLeader(u)];
}
};
struct Edge
{
int u, v;
int d;
Edge(){};
Edge(int u, int v, int d)
{
this->u = u;
this->v = v;
this->d = d;
}
friend bool operator<(const Edge &e1, const Edge &e2)
{
return e1.d < e2.d;
}
};
struct Query
{
int u, w, idx;
Query(){};
Query(int u, int w)
{
this->u = u;
this->w = w;
}
friend bool operator<(const Query &q1, const Query &q2)
{
return q1.w < q2.w;
}
};
int n, m, q;
DSU dsu;
Edge edges[2 * MAXN];
Query queries[2 * MAXN];
int ans[2 * MAXN];
void read()
{
cin >> n >> m;
for(int i = 1; i <= m; i++)
{
cin >> edges[i].u >> edges[i].v >> edges[i].d;
}
cin >> q;
for(int i = 1; i <= q; i++)
{
int type;
cin >> type;
cin >> queries[i].u >> queries[i].w;
queries[i].idx = i;
}
}
void solve()
{
dsu.init(n);
sort(edges + 1, edges + m + 1);
sort(queries + 1, queries + q + 1);
int ptr = 1;
for(int i = 1; i <= q; i++)
{
while(ptr <= m && edges[ptr].d <= queries[i].w)
{
dsu.unite(edges[ptr].u, edges[ptr].v);
ptr++;
}
ans[queries[i].idx] = dsu.query(queries[i].u);
}
for(int i = 1; i <= q; i++)
{
cout << ans[i] << endl;
}
}
int main()
{
read();
solve();
return 0;
}
| # | 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... |