Submission #1281451

#TimeUsernameProblemLanguageResultExecution timeMemory
1281451Jawad_Akbar_JJ다리 (APIO19_bridges)C++20
73 / 100
2422 ms5012 KiB
#include <iostream> #include <vector> #include <stack> #include <algorithm> using namespace std; const int N = 100005, K = 500; int seen[N], Sz[N], Ans[N], a[N], b[N], c[N], x[N], y[N], z[N], lst[N], nxt[N], Par[N]; int root(int v){ while (Par[v] != 0) v = Par[v]; return v; } void solve(int n, int m, int q){ vector<pair<int,int>> vec; for (int i=1;i<=q;i++){ if (x[i] == 1) seen[y[i]] = (seen[y[i]] == 0 ? i : seen[y[i]]); else vec.push_back({z[i], -i}); } for (int i=1;i<=m;i++){ if (seen[i] == 0) vec.push_back({c[i], i}); } sort(rbegin(vec), rend(vec)); for (int i=1;i<=n;i++) Par[i] = 0, Sz[i] = 1; for (auto [vl, i] : vec){ if (i > 0){ int A = root(a[i]), B = root(b[i]); if (A != B and Sz[A] > Sz[B]) Par[B] = A, Sz[A] += Sz[B]; else if (A != B) Par[A] = B, Sz[B] += Sz[A]; continue; } int i1 = -i; stack<pair<int,pair<int,int>>> stk; for (int j=1;j<i1;j++){ if (x[j] == 1) lst[y[j]] = j; } for (int j=1;j<i1;j++){ if (x[j] == 2 or z[j] < vl or lst[y[j]] != j) continue; int A = root(a[y[j]]), B = root(b[y[j]]); if (Sz[A] < Sz[B]) swap(A, B); if (A != B) stk.push({A, {B, Par[B]}}), Par[B] = A, Sz[A] += Sz[B]; } for (int j=i1;j<=q;j++){ if (x[j] == 2 or seen[y[j]] != j or c[y[j]] < z[i1]) continue; int A = root(a[y[j]]), B = root(b[y[j]]); if (Sz[A] < Sz[B]) swap(A, B); if (A != B) stk.push({A, {B, Par[B]}}), Par[B] = A, Sz[A] += Sz[B]; } Ans[i1] = Sz[root(y[i1])]; while (stk.size() > 0){ auto [A, B] = stk.top(); stk.pop(); Par[B.first] = B.second; Sz[A] -= Sz[B.first]; } } for (int i=1;i<=q;i++){ seen[y[i]] = 0; if (x[i] == 2) cout<<Ans[i]<<'\n'; else c[y[i]] = z[i]; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, m, q; cin>>n>>m; for (int i=1;i<=m;i++) cin>>a[i]>>b[i]>>c[i]; cin>>q; while (q > 0){ for (int i=1;i<=min(q, K);i++) cin>>x[i]>>y[i]>>z[i]; solve(n, m, min(q, K)); q -= min(q, K); } }
#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...