60pts求助
查看原帖
60pts求助
1040770
Demo_B11楼主2024/1/12 15:46

Code :

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1010
int k,n,m;
vector<int> G[MAXN],Y[MAXN],now;
bool vis[MAXN];
long long ans=0;
int cnt[MAXN];
void bfs(int u){
	queue<int> q;
	q.push(u);
	vis[u]=1;
	int t,m;
	while(!q.empty()){
		t=q.front();
		q.pop();
		for(int i=0;i<G[t].size();++i){
			m=G[t][i];
			if(!vis[m]){
				Y[u].push_back(m);
				vis[m]=1;q.push(m);
			}
		}
	}
}
int main(){
	scanf("%d%d%d",&k,&n,&m);
	for(int i=1;i<=k;i++){
		int x;scanf("%d",&x);
		now.push_back(x);
	}
	for(int i=1;i<=m;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		G[u].push_back(v);
	}
	for(int i=0;i<k;i++){
		memset(vis,0,sizeof(vis));
		int t=now[i];
		Y[t].push_back(t);
		bfs(t);
		for(int j=0;j<Y[t].size();j++){
			cnt[Y[t][j]]++;
		}
	}
	for(int i=1;i<=n;i++){
		if(cnt[i]==k){
			ans++;
		}
	}printf("%lld",ans);
	return 0;
} 
2024/1/12 15:46
加载中...