Submission #864150

# Submission time Handle Problem Language Result Execution time Memory
864150 2023-10-22T07:33:00 Z danikoynov Event Hopping (BOI22_events) C++14
0 / 100
1500 ms 96888 KB
    #include<bits/stdc++.h>
    #define debug true
    #ifdef DEVAL 
        #define debug false
    #endif

    using namespace std;

    const int maxn = 1e5 + 10;

    struct interval
    {
        int s, e;
    }seg[maxn];

    int n, q;   
    pair < int, int > task[maxn];
    void read()
    {
        cin >> n >> q;
        for (int i = 1; i <= n; i ++)
        {
            cin >> seg[i].s >> seg[i].e;
        }
        for (int i = 1; i <= q; i ++)
        {
            cin >> task[i].first >> task[i].second;
        }
    }


    vector < int > adj[maxn];

    int used[maxn], dist[5010][5010];
    int nxt[5010][5010];
    int my_queue[maxn];
    void bfs(int start)
    {
        for (int i = 1; i <= n; i ++)
            used[i] = -1;

        used[start] = 0;
        int st = 1, en = 0;
        my_queue[++ en]  = start;
        while(st <= en)
        {
            int v = my_queue[st ++];
            int u = nxt[v][0];
            while(u <= n)
            {
                if (used[u] == - 1)
                {
                    used[u] = used[v] + 1;
                    my_queue[++ en] = u;
                }
                u = nxt[v][u];
                assert(nxt[v][u] > u);
            }
        }
    }

    void build_graph()
    {
        for (int i = 1; i <= n; i ++)
        {
            for (int j = 0; j <= n; j ++)
                nxt[i][j] = n + 1;
            int last = 0;
            for (int j = 1; j <= n; j ++)
            {
                if (seg[j].s <= seg[i].e && seg[i].e <= seg[j].e)
                    nxt[i][last] = j, last = j;
            }
        }
    }

    void answer_queries()
    {
        for (int i = 1; i <= q; i ++)
        {
            if (dist[task[i].first][task[i].second] == -1)
                cout << "impossible" << endl;
            else
                cout << dist[task[i].first][task[i].second] << endl;

        }
    }

    void precalc()
    {
        for (int v = 1; v <= n; v ++)
        {
            bfs(v);
            for (int i = 1; i <= n; i ++)
                dist[v][i] = used[i];
        }
    }

    void speed()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        cout.tie(NULL);
    }

    void solve()
    {

        read();
        build_graph();
        precalc();
        answer_queries();    
    }

    int main()
    {
        speed();
        solve();
        return 0;
    }
# Verdict Execution time Memory Grader output
1 Runtime error 10 ms 13916 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 10 ms 13752 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 10 ms 13752 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 10 ms 13752 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1540 ms 96888 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 10 ms 13916 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -