60pts求条
查看原帖
60pts求条
1152799
wsy_I楼主2025/7/21 11:22
#include<bits/stdc++.h>
#define N (int)(1e3+1e1)
using namespace std;
int k,n,m,u,v,cnt;
bool vis[N],vst[N];
vector<int> vt[N];
int dfs(int x){
    int ctr=0;
	vst[x]=true;
    if(vis[x]) ctr=1; 
	for(int i=0;i<vt[x].size();i++){
		if(!vst[vt[x][i]]) ctr+=dfs(vt[x][i]);
	}
    return ctr;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>k>>n>>m;
	for(int i=1;i<=k;i++){
		cin>>u;
		vis[u]=true;
	}
	for(int i=1;i<=m;i++){
		cin>>u>>v;
		vt[v].push_back(u);//反图
	}
	for(int i=1;i<=n;i++){
		memset(vst,false,sizeof(vst));
		if(dfs(i)==k) cnt++;
	}
	cout<<cnt<<endl;
	return 0;
}

评测记录:

AC AC AC AC WA
AC WA WA AC WA

思路:vis标记牧场有没有牛,vst作为dfs的访问标记。"如果一个奶牛能到达一个牧场,那么在反图中牧场就能到达奶牛",换言之“所有奶牛能到达一个牧场,在反图中牧场就能到达所有奶牛”。

2025/7/21 11:22
加载中...