Submission #1155087

#TimeUsernameProblemLanguageResultExecution timeMemory
1155087FilipLDrivers (BOI24_drivers)C++20
100 / 100
93 ms8336 KiB
#include <bits/stdc++.h>
using namespace std;
#define rep(a, b) for (int a = 0; a < (b); a++)
#define rep1(a, b) for (int a = 1; a <= (b); a++)
#define all(x) (x).begin(), (x).end()
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int MOD = 1e9 + 7;

#define LOCAL false

const int LIM = 2e5 + 7;
int V, E, q;

struct Edge { int v1, v2, c; };
bool cmp(Edge e1, Edge e2) {
    return e1.c < e2.c;
}

Edge edges[LIM];    // (c, (v1, v2))


pair<int, Edge> queries[LIM];  // (c, idx)
bool qans[LIM];

int par[LIM];
int sz[LIM];
int repr(int v) {
    if (par[v] == v) return v;
    return par[v] = repr(par[v]);
}
void uni(int v1, int v2) {
    v1 = repr(v1);
    v2 = repr(v2);
    if (v1 == v2) return;
    if (sz[v1] < sz[v2]) swap(v1, v2);
    sz[v1] += sz[v2];
    par[v2] = v1;
} 

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    if (LOCAL) {
        ignore=freopen("io/in", "r", stdin);
        ignore=freopen("io/out", "w", stdout);
    }

    cin >> V >> E >> q;
    int v1, v2, c;
    rep(i, E) {
        cin >> v1 >> v2 >> c;
        edges[i] = {v1, v2, c};
    }
    rep(i, q) {
        cin >> v1 >> v2 >> c;
        queries[i] = {i, {v1, v2, c}};
    }

    sort(edges, edges+E, cmp);
    sort(queries, queries+q, [&](auto q1, auto q2) {
        return cmp(q1.second, q2.second);
    });

    iota(par+1, par+1+V, 1);
    fill(sz+1, sz+1+V, 1);

    int eidx = 0;
    rep(i, q) {
        auto [idx, e] = queries[i];
        while (eidx < E && edges[eidx].c <= e.c) {
            auto [v1, v2, c] = edges[eidx];
            uni(v1, v2);
            eidx++;
        }
        int g1 = repr(e.v1);
        int g2 = repr(e.v2);
        qans[idx] = (g1==g2);
    }

    rep(i, q) cout << (qans[i] ? "TAIP" : "NE") << "\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...