105272024-04-04 17:20:08111Kutyavetélkedő 2cpp17Időlimit túllépés 21/1001.319s664952 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());
	}
	vector<int>w(O);
	vector<set<int>>s(O);
	auto dfs=[&](auto self,int i)->void{
		if(w[i]){
			return;
		}
		w[i]=1;
		for(int j:h[i]){
			self(self,j);
			s[i].insert(s[j].begin(),s[j].end());
		}
		s[i].insert(i);
	};
	for(int i=0;i<O;i++){
		dfs(dfs,i);
	}
	for(int i=1;i<=K;i++){
		sort(g[i].begin(),g[i].end());
	}
	int ans=2;
	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;
		}
		if(!s[cc[v[i]]].count(cc[v[i+1]])){
			break;
		}
		ans+=1;
	}
	cout<<ans<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1728 KiB
2Elfogadva3ms1932 KiB
subtask221/21
3Elfogadva3ms2432 KiB
4Elfogadva3ms2516 KiB
5Elfogadva3ms2828 KiB
6Elfogadva4ms3300 KiB
7Elfogadva4ms3304 KiB
8Elfogadva3ms3216 KiB
9Elfogadva4ms3512 KiB
subtask30/45
10Időlimit túllépés1.315s214936 KiB
11Időlimit túllépés1.258s208408 KiB
12Időlimit túllépés1.296s558776 KiB
13Időlimit túllépés1.307s618784 KiB
14Időlimit túllépés1.304s558384 KiB
15Időlimit túllépés1.299s559708 KiB
16Időlimit túllépés1.287s631732 KiB
17Időlimit túllépés1.299s598276 KiB
18Időlimit túllépés1.294s664952 KiB
19Időlimit túllépés1.294s601524 KiB
20Időlimit túllépés1.312s609180 KiB
subtask40/34
21Időlimit túllépés1.305s529784 KiB
22Időlimit túllépés1.297s606412 KiB
23Időlimit túllépés1.309s530424 KiB
24Időlimit túllépés1.319s551720 KiB
25Időlimit túllépés1.289s603956 KiB
26Időlimit túllépés1.312s530736 KiB