Submission #1235646

#TimeUsernameProblemLanguageResultExecution timeMemory
1235646gry3125Drivers (BOI24_drivers)C++20
100 / 100
250 ms25536 KiB
#include <bits/stdc++.h>
#define ll long long int
#define pb push_back
#define fi first
#define se second
#define all(v) (v).begin(),(v).end()
using namespace std;

ll par[200005], sz[200005];
ll find(ll a) {
    if (par[a] == a) return a;
    return par[a] = find(par[a]);
}
void merge(ll a, ll b) {
    a = find(a); b = find(b);
    if (a == b) return;
    if (sz[a] < sz[b]) swap(a, b);
    par[b] = a; sz[a] += sz[b]; sz[b] = 0;
}

int main() {
    int n, m, u; cin >> n >> m >> u;
    for (ll i = 1; i <= n; i++) {
        par[i] = i; sz[i] = 1;
    }
    vector<pair<ll,pair<ll,ll>>> e;
    for (int i = 0; i < m; i++) {
        ll a, b, t; cin >> a >> b >> t;
        e.pb({t, {a, b}});
    }
    vector<pair<pair<ll,ll>,pair<ll,ll>>> q;
    for (int i = 0; i < u; i++) {
        ll a, b, p; cin >> a >> b >> p;
        q.pb({{p, i}, {a, b}});
    }
    sort(all(e)); sort(all(q));
    vector<string> ans(u);
    int cur = 0; // havent merge
    for (int i = 0; i < u; i++) {
        ll a = q[i].se.fi, b = q[i].se.se;
        ll p = q[i].fi.fi, id = q[i].fi.se;
        while (cur < m && e[cur].fi <= p) {
            merge(e[cur].se.fi, e[cur].se.se); cur++;
        }
        a = find(a); b = find(b);
        if (a == b) ans[id] = "TAIP";
        else ans[id] = "NE";
    }
    for (int i = 0; i < u; i++) {
        cout << ans[i] << "\n";
    }
    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...