Submission #363896

#TimeUsernameProblemLanguageResultExecution timeMemory
363896ogibogi2004Shell (info1cup18_shell)C++14
100 / 100
818 ms48816 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long const int MAXN=1e6+6; const ll mod=1e9+7; int n,m,p; vector<int>g[MAXN]; vector<int>t; bool vis[MAXN]; void dfs(int u) { vis[u]=1; for(auto v:g[u]) { if(vis[v]==0) { dfs(v); } } t.push_back(u); } int a[MAXN]; int where[MAXN]; int w1[MAXN]; ll dp[MAXN]; int main() { cin>>n>>m>>p; for(int i=1;i<=p;i++) { cin>>a[i]; } for(int i=0;i<m;i++) { int x,y; cin>>x>>y; g[x].push_back(y); } for(int i=1;i<=n;i++) { if(vis[i]==0) { dfs(i); } } reverse(t.begin(),t.end()); for(int i=0;i<t.size();i++)where[t[i]]=i; /*for(int i=2;i<=p;i++) { if(where[i-1]>where[i]) { cout<<"0\n"; return 0; } }*/ ll ans=1; dp[1]=1ll; //cout<<a[1]<<" "<<where[a[1]]<<endl; for(int j=where[1];j<=where[a[1]];j++) { for(auto v:g[t[j]]) { if(where[v]>where[a[1]])continue; //cout<<t[j]<<"->"<<v<<endl; dp[v]+=dp[t[j]]; dp[v]%=mod; } } ans*=dp[a[1]]; //cout<<ans<<endl; for(ll i=2;i<=p;i++) { dp[a[i-1]]=1; for(int j=where[a[i-1]];j<=where[a[i]];j++) { for(auto v:g[t[j]]) { if(where[v]>where[a[i]])continue; dp[v]+=dp[t[j]]; dp[v]%=mod; } } ans*=dp[a[i]]; ans%=mod; //cout<<ans<<endl; } dp[a[p]]=1; for(int j=where[a[p]];j<=where[n];j++) { for(auto v:g[t[j]]) { if(where[v]>where[n])continue; dp[v]+=dp[t[j]]; dp[v]%=mod; } } ans*=dp[n]; ans%=mod; cout<<ans<<endl; return 0; } /* 6 9 3 3 5 6 1 3 1 3 1 2 2 3 2 4 3 4 3 5 4 5 5 6 */

Compilation message (stderr)

shell.cpp: In function 'int main()':
shell.cpp:47:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |  for(int i=0;i<t.size();i++)where[t[i]]=i;
      |              ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...