BFS 90分求助!(码风优良)
查看原帖
BFS 90分求助!(码风优良)
795344
lfxxx_楼主2023/8/22 22:56
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int N=1e3+5,M=1e4+5;
vector<int>e[N];//邻接表存图
int cow[N];
int cnt[N];
bool vis[N];
void BFS(int x)//BFS统计这头牛能走到哪些点
{
	queue<int>q;
	q.push(x);//必然可以走到自己
	while(!q.empty())//BFS拓展
	{
		int u=q.front();
		vis[u]=1;
		cnt[u]++;//增加
		for(int i=0;i<(int)e[u].size();i++)
		{
			int v=e[u][i];
			if(!vis[v])q.push(v);
		}
		q.pop();
	}
}
int main()
{
	int k,n,m,ans=0;
	scanf("%d%d%d",&k,&n,&m);
	for(int i=1;i<=k;i++)scanf("%d",&cow[i]);
	for(int i=1;i<=m;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		e[u].push_back(v);
	}
	for(int i=1;i<=k;i++)//统计每一个牛能去的点
	{
		for(int j=1;j<=n;j++)vis[j]=0;//归0
		BFS(cow[i]);
	}
	for(int i=1;i<=n;i++)if(cnt[i]>=k)ans++;//判断这个点是否可行
	printf("%d",ans);
	return 0;
}
2023/8/22 22:56
加载中...