답안 #363893

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
363893 2021-02-07T12:57:46 Z ogibogi2004 Shell (info1cup18_shell) C++14
20 / 100
610 ms 45036 KB
#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;
		}
	}
	if(where[a[1]]<where[1])
	{
			cout<<"0\n";
			return 0;
	}
	if(where[a[p]]>where[n])
	{
			cout<<"0\n";
			return 0;
	}
	for(int i=0;i<MAXN;i++)w1[i]=n+3;
	for(int j=where[a[1]]-1;j>=0;j--)w1[j]=where[a[1]];
	for(int i=2;i<=p;i++)
	{
		for(int j=where[a[i]]-1;j>=where[a[i-1]];j--)
		{
			w1[j]=where[a[i]];
		}
	}
	dp[1]=1;
	for(int i=0;i<t.size();i++)
	{
		for(auto v:g[t[i]])
		{
			if(where[v]>w1[i])continue;
			dp[v]+=dp[t[i]];
			dp[v]%=mod;
		}
	}
	cout<<dp[n]<<endl;
return 0;
}
/*
6 9 2
1 3
1 3
1 3
1 2
2 3
2 4
3 4
3 5
4 5
5 6
*/

Compilation message

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;
      |              ~^~~~~~~~~
shell.cpp:76:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |  for(int i=0;i<t.size();i++)
      |              ~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 27756 KB Output is correct
2 Incorrect 16 ms 23788 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 27756 KB Output is correct
2 Incorrect 16 ms 23788 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 27756 KB Output is correct
2 Correct 262 ms 30444 KB Output is correct
3 Correct 265 ms 30444 KB Output is correct
4 Correct 265 ms 30444 KB Output is correct
5 Correct 189 ms 32364 KB Output is correct
6 Correct 602 ms 45036 KB Output is correct
7 Correct 610 ms 44908 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 27756 KB Output is correct
2 Incorrect 16 ms 23788 KB Output isn't correct
3 Halted 0 ms 0 KB -