10536 2024. 04. 04 18:10:41 111 Kutyavetélkedő 2 cpp17 Elfogadva 100/100 351ms 124092 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]];
	vector<int>w(O);
	deque<int>q;
	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]];
		w[last]=1;
		q.push_back(last);
		while(!q.empty()&&last!=next){
			int i=q.front();
			q.pop_front();
			for(int j:h[i]){
				if(w[j]||j>next){
					continue;
				}
				w[j]=1;
				q.push_back(j);
				if(j==next){
					last=j;
					break;
				}
			}
		}
		if(last!=next){
			break;
		}
		ans+=1;
	}
	cout<<ans<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1828 KiB
2 Elfogadva 3ms 2056 KiB
subtask2 21/21
3 Elfogadva 3ms 2416 KiB
4 Elfogadva 3ms 2628 KiB
5 Elfogadva 3ms 2972 KiB
6 Elfogadva 3ms 2856 KiB
7 Elfogadva 3ms 2920 KiB
8 Elfogadva 3ms 3216 KiB
9 Elfogadva 3ms 3360 KiB
subtask3 45/45
10 Elfogadva 81ms 17592 KiB
11 Elfogadva 76ms 17168 KiB
12 Elfogadva 115ms 30856 KiB
13 Elfogadva 107ms 30956 KiB
14 Elfogadva 119ms 31084 KiB
15 Elfogadva 111ms 30932 KiB
16 Elfogadva 122ms 34760 KiB
17 Elfogadva 122ms 39236 KiB
18 Elfogadva 125ms 40576 KiB
19 Elfogadva 123ms 41020 KiB
20 Elfogadva 122ms 40944 KiB
subtask4 34/34
21 Elfogadva 241ms 56324 KiB
22 Elfogadva 351ms 74640 KiB
23 Elfogadva 340ms 94828 KiB
24 Elfogadva 335ms 124092 KiB
25 Elfogadva 344ms 94904 KiB
26 Elfogadva 296ms 75120 KiB