105302024-04-04 17:33:27111Kutyavetélkedő 2cpp17Időlimit túllépés 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Elfogadva3ms2188 KiB
subtask221/21
3Elfogadva3ms2480 KiB
4Elfogadva3ms2692 KiB
5Elfogadva3ms2736 KiB
6Elfogadva3ms3012 KiB
7Elfogadva3ms2964 KiB
8Elfogadva3ms3220 KiB
9Elfogadva3ms3280 KiB
subtask30/45
10Időlimit túllépés1.299s8968 KiB
11Időlimit túllépés1.274s8956 KiB
12Időlimit túllépés1.269s15596 KiB
13Időlimit túllépés1.281s15356 KiB
14Időlimit túllépés1.233s15544 KiB
15Időlimit túllépés1.258s15776 KiB
16Időlimit túllépés1.277s17544 KiB
17Időlimit túllépés1.274s19956 KiB
18Elfogadva238ms38768 KiB
19Időlimit túllépés1.271s21372 KiB
20Időlimit túllépés1.274s20544 KiB
subtask40/34
21Időlimit túllépés1.243s28536 KiB
22Időlimit túllépés1.259s37776 KiB
23Időlimit túllépés1.25s48908 KiB
24Elfogadva331ms120496 KiB
25Időlimit túllépés1.256s46992 KiB
26Időlimit túllépés1.264s38540 KiB