#include <bits/stdc++.h>
#define int long long
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
using namespace std;
vector<int> parent;
vector<int> sz;
int getParent(int a){
if(a==parent[a]) return a;
return parent[a]=getParent(parent[a]);
}
void unite(int a, int b){
a=getParent(a);
b=getParent(b);
if(a==b) return;
if(sz[b]>sz[a]) swap(a,b);
sz[a]+=sz[b];
parent[b]=a;
return;
}
signed main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr);
int n,m,q; cin >> n >> m;
parent.resize(n);
sz.resize(n);
vector<pair<int,pair<int,int>>> edges(m);
for (int i = 0; i < m; i++)
{
int u,v,w; cin >> u >> v >> w; u--; v--;
edges[i]={w,{u,v}};
}
cin >> q;
for (int i = 0; i < n; i++)
{
parent[i]=i;
sz[i]=1;
}
vector<pair<int,pair<int,int>>> query(q);
vector<int> out(q);
for (int i = 0; i < q; i++)
{
int t; cin >> t;
int s,mw; cin >> s >> mw; s--;
query[i]={mw,{s,i}};
}
sort(rall(edges));
sort(rall(query));
int l=0;
for (int i = 0; i < q; i++)
{
int mw=query[i].first,s=query[i].second.first,j=query[i].second.second;
while(l<m&&edges[l].first>=mw) {
unite(edges[l].second.first,edges[l].second.second);
l++;
}
out[j]=sz[getParent(s)];
}
for (int i = 0; i < q; i++)
{
cout << out[i] << "\n";
}
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... |