제출 #1321953

#제출 시각아이디문제언어결과실행 시간메모리
1321953NValchanov다리 (APIO19_bridges)C++20
0 / 100
209 ms3896 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int MAXN = 5e4 + 10; struct DSU { int leader[MAXN]; int sz[MAXN]; DSU(){}; void init(int n) { for(int i = 1; i <= n; i++) { leader[i] = i; sz[i] = 1; } } int findLeader(int u) { return leader[u] == u ? u : leader[u] = findLeader(leader[u]); } bool connected(int u, int v) { return findLeader(u) == findLeader(v); } void unite(int u, int v) { if(connected(u, v)) return; u = findLeader(u); v = findLeader(v); if(sz[u] < sz[v]) swap(u, v); sz[u] += sz[v]; leader[v] = u; } int query(int u) { return sz[findLeader(u)]; } }; struct Edge { int u, v; int d; Edge(){}; Edge(int u, int v, int d) { this->u = u; this->v = v; this->d = d; } friend bool operator<(const Edge &e1, const Edge &e2) { return e1.d < e2.d; } }; struct Query { int u, w, idx; Query(){}; Query(int u, int w) { this->u = u; this->w = w; } friend bool operator<(const Query &q1, const Query &q2) { return q1.w < q2.w; } }; int n, m, q; DSU dsu; Edge edges[2 * MAXN]; Query queries[2 * MAXN]; int ans[2 * MAXN]; void read() { cin >> n >> m; for(int i = 1; i <= m; i++) { cin >> edges[i].u >> edges[i].v >> edges[i].d; } cin >> q; for(int i = 1; i <= q; i++) { int type; cin >> type; cin >> queries[i].u >> queries[i].w; queries[i].idx = i; } } void solve() { dsu.init(n); sort(edges + 1, edges + m + 1); sort(queries + 1, queries + q + 1); int ptr = 1; for(int i = 1; i <= q; i++) { while(ptr <= m && edges[ptr].d <= queries[i].w) { dsu.unite(edges[ptr].u, edges[ptr].v); ptr++; } ans[queries[i].idx] = dsu.query(queries[i].u); } for(int i = 1; i <= q; i++) { cout << ans[i] << endl; } } int main() { read(); solve(); 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...