105312024-04-04 17:37:26111Kutyavetélkedő 2cpp17Hibás válasz 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1828 KiB
2Elfogadva3ms2036 KiB
subtask20/21
3Elfogadva3ms2412 KiB
4Elfogadva3ms2480 KiB
5Hibás válasz3ms2812 KiB
6Elfogadva3ms2576 KiB
7Elfogadva3ms2584 KiB
8Hibás válasz3ms2836 KiB
9Elfogadva3ms3028 KiB
subtask30/45
10Időlimit túllépés1.333s636792 KiB
11Időlimit túllépés1.297s614988 KiB
12Időlimit túllépés1.294s186160 KiB
13Időlimit túllépés1.281s167588 KiB
14Időlimit túllépés1.235s172032 KiB
15Időlimit túllépés1.274s168020 KiB
16Időlimit túllépés1.274s142864 KiB
17Időlimit túllépés1.287s107152 KiB
18Időlimit túllépés1.266s89516 KiB
19Időlimit túllépés1.271s92864 KiB
20Időlimit túllépés1.263s91984 KiB
subtask40/34
21Időlimit túllépés1.263s193076 KiB
22Időlimit túllépés1.269s130076 KiB
23Időlimit túllépés1.274s86612 KiB
24Elfogadva344ms120108 KiB
25Időlimit túllépés1.281s83696 KiB
26Időlimit túllépés1.291s128976 KiB