제출 #853886

#제출 시각아이디문제언어결과실행 시간메모리
853886overwatch9Bitaro’s Party (JOI18_bitaro)C++17
0 / 100
2 ms6236 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn = 1e5 + 1;
vector <int> adj[maxn], adjr[maxn];
int indeg[maxn], outdeg[maxn], processed[maxn];
bool blocked[maxn];
int main() {
    int n, m, q;
    cin >> n >> m >> q;
    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        adj[a].push_back(b);
        adjr[b].push_back(a);
        indeg[b]++;
        outdeg[a]++;
    }
    int t, y;
    cin >> t >> y;
    for (int i = 0; i < y; i++) {
        int x;
        cin >> x;
        blocked[x] = true;
    }
    int ans = -1;
    priority_queue <pair <int, int>> pq;
    pq.push({0, t});
    vector <int> dis(n+1, -1);
    dis[t] = 0;
    while (!pq.empty()) {
        int a = pq.top().second;
        pq.pop();
        if (processed[a])
            continue;
        processed[a] = true;
        if (!blocked[a])
            ans = max(ans, dis[a]);
        for (auto i : adjr[a]) {
            indeg[i]--;
            pq.push({-indeg[i], i});
            dis[i] = dis[a] + 1;
            if (!blocked[i])
                ans = max(ans, dis[i]);

        }
    }
    cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...