Submission #1231052

#TimeUsernameProblemLanguageResultExecution timeMemory
1231052ThommyDBDrivers (BOI24_drivers)C++20
0 / 100
2125 ms784744 KiB
#include<bits/stdc++.h>

using namespace std;
#define int long long

const int INF = 1e16;

int n, m, u;
vector<vector<pair<int, int>>> adj;

signed main(){
    cin >> n >> m >> u;
    adj.resize(n);
    for(int i = 0; i < m; i++){
        int a, b, t;
        cin >> a >> b >> t; a--; b--;
        adj[a].push_back({b, t});
        adj[b].push_back({a, t});
    }
    vector<vector<int>> ans(n, vector<int>(n, 0));

    for(int o = 0; o < u; o++){
        int a, b, p;
        cin >> a >> b >> p; a--; b--;
        if(ans[a][b]!=0){
            if(ans[a][b] <= p){
                cout << "TAIP\n";
            }
            else{
                cout << "NE\n";
            }
            continue;
        }
        vector<int> dist(n, INF);
        vector<bool> visited(n, false);
        priority_queue<pair<int, int>> q;
        q.push({0, a});
        dist[a]=0;
        while(!q.empty()){
            int x = q.top().second;
            q.pop();
            if(visited[x])continue;
            visited[x]=true;
            for(auto u : adj[x]){
                if(max(dist[x], u.second) < dist[u.first]){
                    dist[u.first] = max(dist[x], u.second);
                    ans[a][u.first]=dist[u.first];
                    ans[u.first][a]=dist[u.first];
                    q.push({-dist[u.first], u.first});
                }
            }
        }
        
        if(dist[b] <= p){
            cout << "TAIP\n";
        }
        else{
            cout << "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...