Submission #483882

#TimeUsernameProblemLanguageResultExecution timeMemory
483882blueBitaro’s Party (JOI18_bitaro)C++17
14 / 100
2080 ms12220 KiB
#include <iostream>
#include <vector>
using namespace std;

const int rt = -1;
const int INF = 1'000'000'000;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int N, M, Q;
    cin >> N >> M >> Q;

    vector<int> edge[1+N];
    vector<int> rev_edge[1+N];

    for(int j = 1; j <= M; j++)
    {
        int u, v;
        cin >> u >> v;
        edge[u].push_back(v);
        rev_edge[v].push_back(u);
    }


    for(int q = 1; q <= Q; q++)
    {
        int T, Y;
        cin >> T >> Y;

        vector<int> C(Y);
        for(int i = 0; i < Y; i++) cin >> C[i];

        if(Y > rt)
        {
            vector<bool> excluded(1+N, 0);
            for(int c:C) excluded[c] = 1;
            vector<int> maxdist(1+N, -INF);

            for(int i = 1; i <= T; i++)
            {
                if(!excluded[i]) maxdist[i] = 0;
                for(int j: rev_edge[i]) maxdist[i] = max(maxdist[i], 1 + maxdist[j]);
            }

            if(maxdist[T] < 0) maxdist[T] = -1;
            cout << maxdist[T] << '\n';
        }
        else
        {
            cout << "!\n";
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...