105312024-04-04 17:37:26111Kutyavetélkedő 2cpp17Wrong answer 0/1001.333s636792 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]];
	deque<int>q;
	q.push_back(last);
	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]];
		while(!q.empty()&&last!=next){
			int i=q.front();
			q.pop_front();
			for(int j:h[i]){
				q.push_back(j);
				if(j==next){
					last=j;
				}
			}
		}
		if(last!=next){
			break;
		}
		ans+=1;
	}
	cout<<ans<<'\n';
	return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1828 KiB
2Accepted3ms2036 KiB
subtask20/21
3Accepted3ms2412 KiB
4Accepted3ms2480 KiB
5Wrong answer3ms2812 KiB
6Accepted3ms2576 KiB
7Accepted3ms2584 KiB
8Wrong answer3ms2836 KiB
9Accepted3ms3028 KiB
subtask30/45
10Time limit exceeded1.333s636792 KiB
11Time limit exceeded1.297s614988 KiB
12Time limit exceeded1.294s186160 KiB
13Time limit exceeded1.281s167588 KiB
14Time limit exceeded1.235s172032 KiB
15Time limit exceeded1.274s168020 KiB
16Time limit exceeded1.274s142864 KiB
17Time limit exceeded1.287s107152 KiB
18Time limit exceeded1.266s89516 KiB
19Time limit exceeded1.271s92864 KiB
20Time limit exceeded1.263s91984 KiB
subtask40/34
21Time limit exceeded1.263s193076 KiB
22Time limit exceeded1.269s130076 KiB
23Time limit exceeded1.274s86612 KiB
24Accepted344ms120108 KiB
25Time limit exceeded1.281s83696 KiB
26Time limit exceeded1.291s128976 KiB