Submission #1150262

#TimeUsernameProblemLanguageResultExecution timeMemory
1150262abczz다리 (APIO19_bridges)C++20
13 / 100
968 ms589824 KiB
#include <iostream> #include <array> #include <algorithm> #include <cmath> #define ll long long using namespace std; array<ll, 3> A[100005]; vector <array<ll, 4>> Q; vector <ll> U[100005]; ll n, m, q, a, b, c, t, rtq, P[100005], F[100005]; struct DSU{ vector <ll> G, gsz; vector <array<ll, 4>> T; void init(ll sz) { G.resize(sz); gsz.resize(sz); for (int i=0; i<sz; ++i) G[i] = i, gsz[i] = 1; } ll dsu(ll u) { if (G[u] == u) return u; else return dsu(G[u]); } ll query(ll u) { return gsz[dsu(u)]; } void merge(ll a, ll b) { ll u = dsu(a); ll v = dsu(b); if (u == v) return; if (gsz[u] > gsz[v]) swap(u, v); T.push_back({u, G[u], v, gsz[v]}); G[u] = v, gsz[v] += gsz[u]; } void rollback(ll x) { while (T.size() > x) { auto u = T.back(); T.pop_back(); G[u[0]] = u[1], gsz[u[2]] = u[3]; } } }block[400]; int main() { cin.tie(0); ios::sync_with_stdio(0); cin >> n >> m; for (int i=0; i<m; ++i) { for (int j=0; j<3; ++j) { cin >> A[i][j]; } --A[i][0], --A[i][1]; } cin >> q; rtq = sqrt(q); for (int i=0; i<=q/rtq; ++i) { block[i].init(n); } for (int i=1; i<=q; ++i) { cin >> a >> b >> c; --b; if (a == 1) { Q.push_back({A[b][2], b, P[b], i-1}); P[b] = i, A[b][2] = c; } else { F[t] = b; Q.push_back({c, -1, i, t++}); } } for (int i=0; i<m; ++i) { Q.push_back({A[i][2], i, P[i], q}); } sort(Q.begin(), Q.end(), [](auto a, auto b) { return a > b; }); for (auto [u, id, l, r] : Q) { if (id != -1) { a = ((l-1) / rtq)+1; b = r / rtq; for (int i=l; i<min(a*rtq, r+1); ++i) { U[i].push_back(id); } for (int i=a; i<b; ++i) { block[i].merge(A[id][0], A[id][1]); } for (int i=max(min(a*rtq, r+1), b*rtq); i<=r; ++i) { U[i].push_back(id); } } else { ll x = l/rtq, z = block[x].T.size(); for (auto id : U[l]) { block[x].merge(A[id][0], A[id][1]); } F[r] = block[x].query(F[r]); block[x].rollback(z); } } for (int i=0; i<t; ++i) cout << F[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...