제출 #721885

#제출 시각아이디문제언어결과실행 시간메모리
721885GrandTiger1729다리 (APIO19_bridges)C++17
13 / 100
3068 ms2296 KiB
#include <bits/stdc++.h>
using namespace std;

struct DSU {
    vector<int> rt, sz;
    DSU(int n){
        rt.resize(n);
        iota(rt.begin(), rt.end(), 0);
        sz.resize(n, 1);
    }
    int find(int u){
        if (u == rt[u]) return u;
        return rt[u] = find(rt[u]);
    }
    bool same(int u, int v){
        return find(u) == find(v); 
    }
    void unite(int u, int v){
        u = find(u), v = find(v);
        if (u == v) return;
        rt[u] = v;
        sz[v] += sz[u];
    }
    int size(int u){
        return sz[find(u)];
    }
};

struct Edge {
    int u, v, w;
    Edge() = default;
    Edge(int _u, int _v, int _w): u(_u), v(_v), w(_w){} 
};
struct Query {
    int u, w, id;
    Query() = default;
    Query(int _u, int _w, int _i): u(_u), w(_w), id(_i){}
};

int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n, m; cin >> n >> m;
    vector<Edge> ed(m);
    for (int i = 0; i < m; i++){
        int u, v, w; cin >> u >> v >> w;
        u--, v--;
        ed[i] = Edge(u, v, w);
    }
    int q; cin >> q;
    while (q--){
        int t; cin >> t;
        if (t == 1){
            int i, w; cin >> i >> w;
            i--;
            ed[i].w = w;
        }else{
            int u, w; cin >> u >> w;
            u--;
            DSU dsu(n);
            for (auto &[uu, vv, ww]: ed){
                if (ww >= w)
                    dsu.unite(uu, vv);
            }
            cout << dsu.size(u) << '\n';
        }
    }
    return 0;
}
#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...