Submission #1259357

#TimeUsernameProblemLanguageResultExecution timeMemory
1259357IrateBridges (APIO19_bridges)C++20
14 / 100
51 ms3908 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...