Submission #1159912

#TimeUsernameProblemLanguageResultExecution timeMemory
1159912pointsixDrivers (BOI24_drivers)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<array<long long, 3>> val3;
typedef vector<array<long long, 4>> val4;

ll p[300000];
ll sz[300000];

ll find(ll a){
    return p[a] == a ? a : p[a] = find(p[a]);
}

void unite(ll a, ll b){
    ll at = find(a); ll bt = find(b);
    if(at == bt) return;
    if(sz[bt] > sz[at]) swap(at, bt);
    p[bt] = at; sz[at] += sz[bt];
}

int main(){
    ll n, m, q; cin >> n >> m >> q;
    val3 roads = val3 (m);
    for(int i = 0; i < m; i++){
        cin >> roads[i][1] >> roads[i][2] >> roads[i][0];
    }
    sort(roads.begin(), roads.end());
    val4 qrs = val4 (q);
    for(int i = 0; i < q; i++){
        cin >> qrs[i][1] >> qrs[i][2] >> qrs[i][0];
        qrs[i][3] = i;
    }
    sort(qrs.begin(), qrs.end());
    val3 ans;
    int pnt = 0;
    for(auto i : qrs){
        while(pnt < m && roads[pnt][0] < i[0]){
            unite(roads[pnt][1], roads[pnt][2]);
            pnt++;
        }
        ans.push_back({i[3], find(i[1]) == find(i[2]), 0});
    }
    sort(ans.begin(), ans.end());
    for(auto i : ans){
        cout << (i[1] ? "TAIP" : "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...