Submission #1062164

#TimeUsernameProblemLanguageResultExecution timeMemory
1062164peraShell (info1cup18_shell)C++17
0 / 100
9 ms51292 KiB
#include<bits/stdc++.h> using namespace std; const int N = 1e6 + 1 , mod = 1e9 + 7; vector<int> g[N] , r[N] , E(N); inline void read(int &x){ char c;int f=1; while(!isdigit(c=getchar()))if(c=='-')f=-1; x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15); x*=f; } int main(){ int n , m , p; read(n); read(m); read(p); vector<int> x(p + 1); for(int i = 1;i <= p;i ++){ read(x[i]); } if(x.back() != n){ x.emplace_back(n); } for(int i = 1;i <= m;i ++){ int u , v; read(u); read(v); E[v]++; g[u].emplace_back(v); r[v].emplace_back(u); } queue<int> q; for(int i = 1;i <= n;i ++){ if(E[i] == 0){ q.push(i); } } vector<int> order; while((int)q.size()){ int u = q.front(); q.pop(); order.emplace_back(u); for(int v : g[u]){ if(--E[v] == 0){ q.push(v); } } } int pos = 1 , L = 0; vector<long long> dp(n); for(int i = 0;i < n;i ++){ int v = order[i]; if(v == 1){ dp[v] = 1; } for(int u : r[order[i]]){ dp[v] = (dp[v] + dp[u]) % mod; } if(v == x[pos]){ for(int j = L;j < i;j ++){ dp[order[j]] = 0; } L = i + 1; ++pos; } } cout << dp[x.back()] << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...