Submission #1118688

#TimeUsernameProblemLanguageResultExecution timeMemory
1118688YSH2020Drivers (BOI24_drivers)C++17
100 / 100
285 ms18508 KiB
#include <bits/stdc++.h>
using namespace std;

int p[200005];

int parent(int n) {
    if (p[n] == n) return n;
    return p[n] = parent(p[n]);
}

void merge(int x, int y) {
    x = parent(x); y = parent(y);
    if (x == y) return;
    p[x] = y;
}

int main() {
    int n, m, u; cin >> n >> m >> u;
    vector <pair<int, pair<int, int>>> edges;
    for (int i = 0; i < m; i++) {
        int x, y, w; cin >> x >> y >> w;
        edges.push_back({w, {x, y}});
    }
    sort(edges.begin(), edges.end());
    for (int i = 1; i <= n; i++) p[i] = i;
    vector <pair<pair<int, int>, pair<int, int>>> query;
    int ans[u];
    for (int i = 0; i < u; i++) {
        int x, y, dist; cin >> x >> y >> dist;
        query.push_back({{dist, i}, {x, y}});
    }
    sort(query.begin(), query.end());
    int idx = 0;
    for (int i = 0; i < u; i++) {
        while (idx < m and edges[idx].first <= query[i].first.first) {
            merge(edges[idx].second.first, edges[idx].second.second);
            idx++;
        }
        if (parent(query[i].second.first) == parent(query[i].second.second)) ans[query[i].first.second] = 1;
        else ans[query[i].first.second] = 0;
    }
    for (int i = 0; i < u; i++) {
        if (ans[i] == 0) cout << "NE" << '\n';
        else cout << "TAIP" << '\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...