105352024-04-04 18:01:16111Kutyavetélkedő 2cpp17Időlimit túllépés 21/1001.276s123188 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]];
		vector<int>w(O);
		deque<int>q;
		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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1832 KiB
2Elfogadva3ms2052 KiB
subtask221/21
3Elfogadva3ms2428 KiB
4Elfogadva3ms2392 KiB
5Elfogadva3ms2628 KiB
6Elfogadva3ms2972 KiB
7Elfogadva3ms3056 KiB
8Elfogadva3ms3364 KiB
9Elfogadva3ms3548 KiB
subtask30/45
10Elfogadva266ms16356 KiB
11Elfogadva166ms16348 KiB
12Időlimit túllépés1.258s16096 KiB
13Elfogadva1.162s30224 KiB
14Időlimit túllépés1.253s16256 KiB
15Elfogadva1.098s30144 KiB
16Időlimit túllépés1.271s18076 KiB
17Időlimit túllépés1.269s20280 KiB
18Időlimit túllépés1.225s21340 KiB
19Időlimit túllépés1.246s21616 KiB
20Időlimit túllépés1.251s21500 KiB
subtask40/34
21Időlimit túllépés1.258s29320 KiB
22Időlimit túllépés1.264s38432 KiB
23Időlimit túllépés1.271s48164 KiB
24Elfogadva330ms123188 KiB
25Időlimit túllépés1.276s48152 KiB
26Időlimit túllépés1.246s38488 KiB