105292024-04-04 17:30:56111Kutyavetélkedő 2cpp17Hibás válasz 0/1001.299s120780 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());
	}
	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;
		}
		auto dfs=[&](auto self,int i)->int{
			if(i==cc[v[i+1]]){
				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
2Hibás válasz3ms2056 KiB
subtask20/21
3Elfogadva3ms2424 KiB
4Futási hiba3ms2468 KiB
5Hibás válasz3ms2652 KiB
6Hibás válasz3ms2984 KiB
7Hibás válasz3ms3112 KiB
8Hibás válasz3ms3424 KiB
9Hibás válasz3ms3640 KiB
subtask30/45
10Időlimit túllépés1.299s9692 KiB
11Időlimit túllépés1.263s9608 KiB
12Időlimit túllépés1.279s16124 KiB
13Időlimit túllépés1.254s16232 KiB
14Időlimit túllépés1.256s16388 KiB
15Időlimit túllépés1.271s16436 KiB
16Időlimit túllépés1.24s18264 KiB
17Időlimit túllépés1.235s20060 KiB
18Időlimit túllépés1.259s21064 KiB
19Időlimit túllépés1.24s21256 KiB
20Időlimit túllépés1.276s21424 KiB
subtask40/34
21Időlimit túllépés1.273s29156 KiB
22Időlimit túllépés1.245s38064 KiB
23Időlimit túllépés1.266s47436 KiB
24Hibás válasz428ms120780 KiB
25Időlimit túllépés1.277s47832 KiB
26Időlimit túllépés1.256s38076 KiB