Submission #714323

#TimeUsernameProblemLanguageResultExecution timeMemory
714323vjudge1Event Hopping (BOI22_events)C++17
10 / 100
1583 ms36352 KiB
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, q;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> q;
    vector<vector<int>>g(n + 1);
    pair<int, int>events[n + 1];
    for(int i = 1;i <= n;++i){
        cin >> events[i].first >> events[i].second;
    }
    for(int i = 1;i <= n;++i){
        for(int j = 1;j <= n;++j){
            if(i == j)continue;
            if(events[i].second >= events[j].first && events[i].second <= events[j].second){
                g[i].push_back(j);
            }
        }
    }
//    for(int i = 1;i <= n;++i){
//        cout << i << ": ";
//        for(int j : g[i]){
//            cout << j << " ";
//        }
//        cout << '\n';
//    }
    vector<vector<int>>dists(n + 1);
    bool check[n + 1];
    for(int i = 1;i <= n;++i)check[i] = 0;
    for(int i = 0;i < q;++i){
        int u, v;
        cin >> u >> v;
        if(dists[u].size() == n + 1 && dists[u][v] != -1)cout << dists[u][v] << '\n';
        else if(dists[u].size() == n + 1 && dists[u][v] == -1 && check[u])cout << "impossible\n";
        else{
            vector<int>tempo(n + 1, -1);
            queue<int>que;
            que.push(u);
            check[u] = 1;
            tempo[u] = 0;
            while(!que.empty()){
                int cur = que.front();
                que.pop();
                for(int vv : g[cur]){
                    if(tempo[vv] == -1){
                        tempo[vv] = tempo[cur] + 1;
                        que.push(vv);
                    }
                }
            }
            if(tempo[v] == -1)cout << "impossible\n";
            else cout << tempo[v] << '\n';
            swap(tempo, dists[u]);
        }
    }
}

Compilation message (stderr)

events.cpp: In function 'int main()':
events.cpp:37:28: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   37 |         if(dists[u].size() == n + 1 && dists[u][v] != -1)cout << dists[u][v] << '\n';
      |            ~~~~~~~~~~~~~~~~^~~~~~~~
events.cpp:38:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   38 |         else if(dists[u].size() == n + 1 && dists[u][v] == -1 && check[u])cout << "impossible\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...
#Verdict Execution timeMemoryGrader output
Fetching results...