105302024-04-04 17:33:27111Kutyavetélkedő 2cpp17Time limit exceeded 21/1001.299s120496 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++){
		sort(h[i].begin(),h[i].end());
		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;
		}
		int next=cc[v[i+1]];
		auto dfs=[&](auto self,int i)->int{
			if(i==next){
				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
2Accepted3ms2188 KiB
subtask221/21
3Accepted3ms2480 KiB
4Accepted3ms2692 KiB
5Accepted3ms2736 KiB
6Accepted3ms3012 KiB
7Accepted3ms2964 KiB
8Accepted3ms3220 KiB
9Accepted3ms3280 KiB
subtask30/45
10Time limit exceeded1.299s8968 KiB
11Time limit exceeded1.274s8956 KiB
12Time limit exceeded1.269s15596 KiB
13Time limit exceeded1.281s15356 KiB
14Time limit exceeded1.233s15544 KiB
15Time limit exceeded1.258s15776 KiB
16Time limit exceeded1.277s17544 KiB
17Time limit exceeded1.274s19956 KiB
18Accepted238ms38768 KiB
19Time limit exceeded1.271s21372 KiB
20Time limit exceeded1.274s20544 KiB
subtask40/34
21Time limit exceeded1.243s28536 KiB
22Time limit exceeded1.259s37776 KiB
23Time limit exceeded1.25s48908 KiB
24Accepted331ms120496 KiB
25Time limit exceeded1.256s46992 KiB
26Time limit exceeded1.264s38540 KiB