Submission #1331967

#TimeUsernameProblemLanguageResultExecution timeMemory
1331967Zone_zoneeDrivers (BOI24_drivers)C++20
100 / 100
115 ms9700 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;

vector<tuple<int, int, int>> edge;
vector<tuple<int, int, int, int>> queries;
int par[N];
int fp(int u){
    return par[u] = (par[u] == u ? u : fp(par[u]));
}
bool ans[N];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m, q;
    cin >> n >> m >> q;
    iota(par, par+n+1, 0);
    for(int i = 0; i < m; ++i){
        int u, v, w;
        cin >> u >> v >> w;
        edge.push_back({w, u, v});
    }
    for(int i = 1; i <= q; ++i){
        int a, b, p;
        cin >> a >> b >> p;
        queries.push_back({p, a, b, i});
    }
    sort(edge.begin(), edge.end());
    sort(queries.begin(), queries.end());
    int e_idx = 0;
    for(auto [p, a, b, idx] : queries){
        for(; e_idx < m; ++e_idx){
            auto [w, u, v] = edge[e_idx];
            if(w > p) break;
            int pu = fp(u), pv = fp(v);
            if(pu == pv) continue;
            par[pu] = pv;
        }
        ans[idx] = (fp(a) == fp(b));
    }
    for(int i = 1; i <= q; ++i){
        cout << (ans[i] ? "TAIP\n" : "NE\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...