105322024-04-04 17:40:28111Kutyavetélkedő 2cpp17Hibás válasz 0/100435ms124044 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]];
	vector<int>w(O);
	deque<int>q;
	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]];
		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]){
					continue;
				}
				w[j]=1;
				q.push_back(j);
				if(j==next){
					last=j;
					q.clear();
					break;
				}
			}
		}
		if(last!=next){
			break;
		}
		ans+=1;
	}
	cout<<ans<<'\n';
	return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1824 KiB
2Elfogadva3ms2060 KiB
subtask20/21
3Elfogadva3ms2404 KiB
4Elfogadva3ms2620 KiB
5Elfogadva3ms2828 KiB
6Elfogadva3ms3168 KiB
7Elfogadva3ms3360 KiB
8Hibás válasz3ms3204 KiB
9Elfogadva3ms3456 KiB
subtask30/45
10Hibás válasz71ms16720 KiB
11Hibás válasz71ms16816 KiB
12Hibás válasz100ms30324 KiB
13Hibás válasz104ms30560 KiB
14Hibás válasz101ms30568 KiB
15Hibás válasz100ms30808 KiB
16Hibás válasz105ms34592 KiB
17Hibás válasz125ms38356 KiB
18Hibás válasz118ms40416 KiB
19Hibás válasz118ms40720 KiB
20Hibás válasz116ms40852 KiB
subtask40/34
21Hibás válasz232ms56700 KiB
22Hibás válasz287ms75092 KiB
23Hibás válasz337ms94412 KiB
24Elfogadva435ms124044 KiB
25Hibás válasz345ms94392 KiB
26Hibás válasz293ms75132 KiB