Submission #1297625

#TimeUsernameProblemLanguageResultExecution timeMemory
1297625HiepVu217Shell (info1cup18_shell)C++20
100 / 100
185 ms13004 KiB
//Proud of You//
#include <bits/stdc++.h>
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
using namespace std;
const int N = 1e6 + 17, M = 1e9 + 7;
int n, m, k, id[N], mx[N], c[N], f[N];
vector <int> adj[N], topo;
queue <int> q;
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m >> k;
    for (int i = 1, u; i <= k; ++i)
    {
        cin >> u;
        id[u] = i;
    }
    for (int i = 1, u, v; i <= m; ++i)
    {
        cin >> u >> v;
        adj[u].push_back(v);
        ++c[v];
    }
    for (int u = 1; u <= n; ++u)
    {
        if (!c[u])
        {
            q.push(u);
        }
    }
    while (!q.empty())
    {
        int u = q.front();
        q.pop();
        topo.push_back(u);
        mx[u] = max (mx[u], id[u]);
        for (int v: adj[u])
        {
            --c[v];
            mx[v] = max (mx[v], mx[u]);
            if (!c[v])
            {
                q.push(v);
            }
        }
    }
    f[1] = 1;
    for (int u: topo)
    {
        for (int v: adj[u])
        {
            if (mx[v] == mx[u] || id[v] == mx[u] + 1)
            {
                f[v] = (f[v] + f[u]) % M;
            }
        }
    }
    cout << f[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...