10分求助,后面9个wa
查看原帖
10分求助,后面9个wa
585420
youngmagician楼主2022/3/29 16:43
#include <iostream>
#include <string.h>
using namespace std;
struct edge {
	int to;
	int next;
} e[10005];
int cur=0;
int niu[101];//牛所处的牧场
int head[1001];
int vis[1001];//单次遍历用的数组
int pos[1001];//最后判断用的数组
int n,m,k,u,v;
int ans=0;
void dfs(int x) { //x为位置,num为到达地方总和数量
	if(vis[x])
		return ;
	vis[x]=1;
	for(int i=head[x]; i; i=e[i].next) {
		dfs(e[i].to);
	}
	return ;
}
int main() {
	cin>>k>>n>>m;
	for(int x=1; x<=k; x++)
		cin>>niu[x];
	for(int x=1; x<=m; x++) {
		cin>>u>>v;
		cur++;
		if(head[u]) {
			e[head[u]].next=cur;
			head[u]=cur;
			e[cur].to=v;
		} else {
			e[cur].to=v;
			head[u]=cur;
		}
	}
	memset(pos,1,sizeof(pos));
	for(int x=1; x<=k; x++) {
		dfs(niu[x]);
		for(int y=1; y<=n; y++) {
			if(!vis[y])
				pos[y]=0;
		}
		memset(vis,0,sizeof(vis));
	}
	for(int x=1; x<=n; x++) {
		if(pos[x])
			ans++;
	}
	cout<<ans;
	return 0;
}

用的是链式前向星存图,思路是对每个奶牛存在的牧场出发遍历判断抵达哪几个牧场,最后判断有哪些牧场能被所有奶牛到达。

2022/3/29 16:43
加载中...