제출 #1259357

#제출 시각아이디문제언어결과실행 시간메모리
1259357Irate다리 (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...