105292024-04-04 17:30:56111Kutyavetélkedő 2cpp17Wrong answer 0/1001.299s120780 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

void scc_dfs(const auto&g,auto&v,auto&s,int i){
	if(v[i]){
		return;
	}
	v[i]=1;
	for(int j:g[i]){
		scc_dfs(g,v,s,j);
	}
	s.push_back(i);
}

int scc(const auto&g,const auto&gg,auto&c){
	int n=g.size();
	vector<int>v,s;
	v.assign(n,0);
	for(int i=0;i<n;i++){
		scc_dfs(g,v,s,i);
	}
	v.assign(n,0);
	for(int i=n-1;i>=0;i--){
		if(v[s[i]]){
			continue;
		}
		c.emplace_back();
		scc_dfs(gg,v,c.back(),s[i]);
	}
	return c.size();
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N,K;
	cin>>N>>K;
	vector<int>v(N);
	for(int i=0;i<N;i++){
		cin>>v[i];
	}
	int M;
	cin>>M;
	vector<vector<int>>g(K+1),gg(K+1);
	for(int i=0;i<M;i++){
		int a,b;
		cin>>a>>b;
		g[a].push_back(b);
		gg[b].push_back(a);
	}
	vector<vector<int>>c;
	int O=scc(g,gg,c);
	vector<int>cc(K+1);
	for(int i=0;i<O;i++){
		for(int j:c[i]){
			cc[j]=i;
		}
	}
	vector<vector<int>>h(O);
	for(int i=0;i<O;i++){
		for(int j:c[i]){
			for(int k:g[j]){
				int l=cc[k];
				if(l!=i){
					h[i].push_back(l);
				}
			}
		}
	}
	for(int i=0;i<O;i++){
		h[i].erase(unique(h[i].begin(),h[i].end()),h[i].end());
	}
	for(int i=1;i<=K;i++){
		sort(g[i].begin(),g[i].end());
	}
	int ans=2;
	int last=cc[v[0]];
	for(int i=0;i+1<N;i++){
		if(binary_search(g[v[i]].begin(),g[v[i]].end(),v[i+1])){
			ans+=2;
			continue;
		}
		auto dfs=[&](auto self,int i)->int{
			if(i==cc[v[i+1]]){
				last=i;
				return 1;
			}
			for(int j:h[i]){
				if(self(self,j)){
					return 1;
				}
			}
			return 0;
		};
		if(!dfs(dfs,last)){
			break;
		}
		ans+=1;
	}
	cout<<ans<<'\n';
	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1824 KiB
2Wrong answer3ms2056 KiB
subtask20/21
3Accepted3ms2424 KiB
4Runtime error3ms2468 KiB
5Wrong answer3ms2652 KiB
6Wrong answer3ms2984 KiB
7Wrong answer3ms3112 KiB
8Wrong answer3ms3424 KiB
9Wrong answer3ms3640 KiB
subtask30/45
10Time limit exceeded1.299s9692 KiB
11Time limit exceeded1.263s9608 KiB
12Time limit exceeded1.279s16124 KiB
13Time limit exceeded1.254s16232 KiB
14Time limit exceeded1.256s16388 KiB
15Time limit exceeded1.271s16436 KiB
16Time limit exceeded1.24s18264 KiB
17Time limit exceeded1.235s20060 KiB
18Time limit exceeded1.259s21064 KiB
19Time limit exceeded1.24s21256 KiB
20Time limit exceeded1.276s21424 KiB
subtask40/34
21Time limit exceeded1.273s29156 KiB
22Time limit exceeded1.245s38064 KiB
23Time limit exceeded1.266s47436 KiB
24Wrong answer428ms120780 KiB
25Time limit exceeded1.277s47832 KiB
26Time limit exceeded1.256s38076 KiB