Submission #1163629

#TimeUsernameProblemLanguageResultExecution timeMemory
1163629PakinDioxideDrivers (BOI24_drivers)C++17
0 / 100
3 ms5196 KiB
#include <bits/stdc++.h>
#define ll long long
#define int ll

using namespace std;

vector <pair <int, int>> adj[200005];
pair <int, int> up[200005];
int dep[200005];

void dfs(int u, int p) {
    for (auto [v, w] : adj[u]) {
        if (v == p) continue;
        up[v] = {u, w};
        dep[v] = dep[u] + 1;
        dfs(v, u);
    }
}

int32_t main() {
    ios::sync_with_stdio(0), cin.tie(0);
    int n, m, q;
    cin >> n >> m >> q;
    vector <tuple <int, int, int>> E;
    for (int i = 0; i < m; i++) {int u, v, w; cin >> u >> v >> w; E.emplace_back(w, u, v);}
    sort(E.begin(), E.end());
    int par[n+5];
    for (int i = 1; i <= n; i++) par[i] = i;
    function <int(int)> fi = [&] (int x) {
        if (x != par[x]) return par[x] = fi(par[x]);
        return x;
    };
    for (int i = 0; i < m; i++) {
        auto [w, u, v] = E[i];
        if (fi(u) == fi(v)) continue;
        par[fi(u)] = fi(v);
        adj[v].emplace_back(u, w);
        adj[u].emplace_back(v, w);
    }
    dfs(1, 0);
    while (q--) {
        int u, v, p;
        cin >> u >> v >> p;
        if (fi(u) != fi(v)) {cout << "NE\n"; continue;}
        int mx = INT_MIN;
        if (dep[v] > dep[u]) swap(u, v);
        while (dep[u] > dep[v]) mx = max(mx, up[u].second), u = up[u].first;
        while (u != v) mx = max({mx, up[u].second, up[v].second}), u = up[u].first, v = up[v].first;
        if (mx > p) 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...