求助10分
查看原帖
求助10分
1040770
Demo_B11楼主2024/1/12 15:16

Code:

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1010
int k,n,m;
vector<int> G[MAXN]; 
vector<int> now;
vector<int> Y[MAXN];
bool vis[MAXN][MAXN];
long long ans=0;
int cnt[MAXN];
void bfs(int u){
	queue<int> q;
	q.push(u);
	while(!q.empty()){
		int t=q.front();
		q.pop();
		for(int i=0;i<G[t].size();++i){
			if(!vis[u][G[t][i]]){
				Y[u].push_back(G[t][i]);
				q.push(G[t][i]);vis[u][G[t][i]]=true;
			}
		}
	}
}
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<now.size();i++){
		Y[now[i]].push_back(now[i]);
		bfs(now[i]);
		sort(Y[now[i]].begin(),Y[now[i]].end());
		for(int j=0;j<Y[now[i]].size();j++){
			cnt[Y[now[i]][j]]++;
		}
		memset(vis,0,sizeof(vis));
	}

	for(int i=1;i<=n;i++){
		if(cnt[i]==k){
			ans++;
		}
	}printf("%lld",ans);
	return 0;
} 
2024/1/12 15:16
加载中...