Submission #798990

#TimeUsernameProblemLanguageResultExecution timeMemory
798990vjudge1Bitaro’s Party (JOI18_bitaro)C++17
14 / 100
2069 ms16560 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 1e5 + 10;
const int INF = 1e9;

vector<int> g[N];
int n, m, q;
vector<int> order;
bool us[N];

void topsort(int v) {
    us[v] = 1;
    for(int to : g[v]) {
        if(us[to]) continue;
        topsort(to);
    }
    order.push_back(v);
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin >> n >> m >> q;
    for(int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
    }
    for(int i = 1; i <= n; i++) {
        if(us[i]) continue;
        topsort(i);
    }
    while(q--) {
        int t, y;
        cin >> t >> y;
        set<int> st;
        for(int i = 0; i < y; i++) {
            int v;
            cin >> v;
            st.insert(v);
        }
        vector<int> dp(n + 1, -2 * INF);
        dp[t] = 0;
        for(int cur : order) {
            for(int to : g[cur]) dp[cur] = max(dp[cur], dp[to] + 1);
        }
        int ans = -INF;
        for(int i = 1; i <= n; i++) {
            if(st.count(i)) continue;
            ans = max(ans, dp[i]);
        }
        if(ans == -INF) ans = -1;
        cout << ans << '\n';
    }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...