This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
const int N = 200010;
vector <array <int, 3>> mst;
vector <array <int, 3>> arestas;
int ordem_arestas[N];
struct DSU{
int pai[N], sz[N];
DSU(){
for(int i = 1;i < N;i++){
pai[i] = i;
sz[i] = 1;
}
}
int find(int x){
return pai[x] = (pai[x] == x ? x : find(pai[x]));
}
void join(int a, int b, int w){
a = find(a);
b = find(b);
if(a == b) return;
mst.push_back({w, a, b});
if(sz[a] > sz[b]) swap(a, b);
pai[a] = b;
sz[b] += sz[a];
return;
}
} dsu;
vector <array<int, 3>> queries;
int res[N];
int main(){
ios::sync_with_stdio(false); cin.tie(0);
int n, m, q;
cin >> n >> m;
for(int i = 0;i < m;i++){
int a, b, w;
cin >> a >> b >> w;
arestas.push_back({w, a, b});
}
sort(arestas.begin(), arestas.end());
cin >> q;
for(int i = 0;i < q;i++){
int t, a, b;
cin >> t >> a >> b;
queries.push_back({b, a, i});
}
sort(queries.begin(), queries.end());
while(queries.size() > 0){
auto [ww, s, i] = queries.back();
while(arestas.size() > 0){
auto [w, a, b] = arestas.back();
if(w < ww) break;
dsu.join(a, b, w);
arestas.pop_back();
}
res[i] = dsu.sz[dsu.find(s)];
queries.pop_back();
}
for(int i = 0;i < q;i++){
cout << res[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... |