제출 #1297625

#제출 시각아이디문제언어결과실행 시간메모리
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...