제출 #1229362

#제출 시각아이디문제언어결과실행 시간메모리
1229362marsasgrg다리 (APIO19_bridges)C++20
0 / 100
79 ms3252 KiB
#include <bits/stdc++.h> using namespace std; struct UnionFind { vector<int> P; vector<int> S; UnionFind(int N) { P.resize(N); S.resize(N); for (int i = 0; i < N; i++) { P[i] = i; S[i] = 1; } } int raskSakni(int x) { if (P[x] == x) { // Jau radome. return x; } // Ieškome šaknies rekursyviai int saknis = raskSakni(P[x]); // Atnaujiname tėvą, kad kitą kartą rastume greičiau P[x] = saknis; return saknis; } int aibesDydis(int x) { // Tik šakniniai elementai saugo tikrą aibės dydį! return S[raskSakni(x)]; } bool sujungti(int x, int y) { x = raskSakni(x); y = raskSakni(y); if (x == y) { // Jau vienoje aibėje. return false; } if (S[x] > S[y]) { swap(x, y); // `x` dydis mažesnis arba lygus `y` dydžiui. } P[x] = y; // Pakeičiame x tėvą į y. S[y] += S[x]; // Atnaujiname y dydį. S[x] tampa nesvarbus, nes x nebėra šakninis elementas. return true; } bool arVienojeAibeje(int x, int y) { return raskSakni(x) == raskSakni(y); } }; int main() { // node i yra bridge tarp i, i+1 int n, m, q; cin >> n >> m >> q; UnionFind union_find(n); vector<pair<int, pair<int, int>>> tiltai; for (int i = 0; i < m; i++) { int ui, vi, di; cin >> ui >> vi >> di; tiltai.push_back({di, {ui - 1, vi - 1}}); } sort(tiltai.begin(), tiltai.end()); vector<pair<int, pair<int, int>>> queries; vector<int> ans(q); for (int i = 0; i < q; i++){ int t; cin >> t; if (t == 1) { throw; } int s, w; cin >> s >> w; s--; queries.push_back({w, {s, i}}); } sort(queries.begin(), queries.end()); int lastAddedInd = -1; for (auto [carWeight, places]: queries) { while (true) { if (lastAddedInd == m - 1) break; if (auto [bridgeWeight, islands] = tiltai[min(m, lastAddedInd + 1)]; bridgeWeight <= carWeight) { lastAddedInd++; union_find.sujungti(islands.first, islands.second); } else break; } ans[places.second] = union_find.aibesDydis(places.first); } for (const auto i: ans) cout << 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...