제출 #1361962

#제출 시각아이디문제언어결과실행 시간메모리
1361962jiayiiyaijDrivers (BOI24_drivers)C++20
100 / 100
251 ms30928 KiB
// https://oj.uz/problem/view/BOI24_drivers  30/04 - 2026

#include<bits/stdc++.h>
using namespace std;

class UF {
    public:

    vector<int> parent;
    vector<int> size;
    UF(int n) {
        parent.resize(n);
        size.resize(n, 1);
        for (int i=0; i<n; i++) parent[i] = i;
    }

    int F(int x) {
        if (parent[x] == x) return x;
        return (F(parent[x]));
    }

    void U(int a, int b) {
        a = F(a); b = F(b);
        if (a == b) return;
        if (size[a] < size[b]) {
            int c = a;
            a = b; b = c;
        }
        parent[b] = a;
        size[a] += size[b];
    }

    bool S(int a, int b) {
        if (F(a) == F(b)) return true;
        return false;
    }
};

int main() {

    int N, M, U;
    cin >> N >> M >> U;

    UF uf(N);

    vector<vector<int>> roads(M);
    for (int i=0; i<M; i++) {
        int x, y, t;
        cin >> x >> y >> t;
        roads[i] = {t, x-1, y-1};
    } sort(roads.begin(), roads.end());

    vector<vector<int>> queries(U);
    for (int i=0; i<U; i++) {
        int a, b, p;
        cin >> a >> b >> p;
        queries[i] = {p, a-1, b-1, i};
    } sort(queries.begin(), queries.end());

    vector<string> ans(U);
    int curr = 0;
    for (int u=0; u<U; u++) {
        while (curr != M) {
            if (roads[curr][0] > queries[u][0]) break;
            uf.U(roads[curr][1], roads[curr][2]);
            curr++;
        }
        if (uf.S(queries[u][1], queries[u][2])) ans[queries[u][3]] = "TAIP";
        else ans[queries[u][3]] = "NE";
    }

    for (int i=0; i<U; i++) cout << ans[i] << "\n";

    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…