Submission #1137844

#TimeUsernameProblemLanguageResultExecution timeMemory
1137844nikolashamiShell (info1cup18_shell)C++20
100 / 100
188 ms54688 KiB
#include<bits/stdc++.h>
using namespace std;

#define int int64_t
#define pb push_back

const int N=1e6+2,mod=1e9+7;
vector<int>rg[N],cur;
int memo[N],vrx[N],vis[N];

int get(int u,int v){
	cur.push_back(v);
	if(u==v)return memo[v]=1;
	if(memo[v]!=-1)return memo[v];
	int sm=0;
	for(int j:rg[v]){
		if(!vis[j]||j==u)
			sm=(sm+get(u,j))%mod;
	}
	return memo[v]=sm;
}

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n,m,p;
    cin>>n>>m>>p;
    for(int i=1;i<=p;++i)
    	cin>>vrx[i];
    
    for(int i=0,u,v;i<m;++i){
    	cin>>u>>v;
    	rg[v].pb(u);
    }

    vrx[0]=1;
    vrx[p+1]=n;
    p+=2;

    fill(memo,memo+N,-1);

    int ans=1;
    for(int i=1;i<p;++i){
    	cur.clear();
    	ans=(ans*get(vrx[i-1],vrx[i]))%mod;
    	for(auto&x:cur)
    		vis[x]=1;
    }

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