首页 > 代码库 > dfs5

dfs5

搜索练习一

K(1≤K≤100)只奶牛分散在N(1≤N≤1000)个牧场.现在她们要集中起来进餐.牧场之间有M(1≤M≤10000)条有向路连接,而且不存在起点和终点相同的有向路.她们进餐的地点必须是所有奶牛都可到达的地方.那么,有多少这样的牧场呢?

 

第1行输入K,N,M.接下来K行,每行一个整数表示一只奶牛所在的牧场编号.接下来M行,每行两个整数,表示一条有向路的起点和终点。

 

所有奶牛都可到达的牧场个数。

 

 

#include<iostream>

#include<cstdio>

#include<cstring>

#include<cstdlib>

#include<algorithm>

#include<cmath>

#include<string>

#include<vector>

#include<queue>

using namespace std;

vector<int> e[10005];

int k,n,m,a[10005],vis[10005],f[10005],ans=0;

void dfs(int s)

{

     f[s]++;

     vis[s]=true;

     if(f[s]==k)

     ans++;

     for(int i=0;i<e[s].size();i++)

     if(!vis[e[s][i]])

     dfs(e[s][i]);

}

int main()

{

  scanf("%d%d%d",&k,&n,&m);

  for(int i=1;i<=k;i++)

  scanf("%d",&a[i]);

  for(int i=1;i<=m;i++)

  {

int x,y;

scanf("%d%d",&x,&y);

e[x].push_back(y);

    }

    for(int i=1;i<=k;i++)

    {

memset(vis,0,sizeof(vis));

dfs(a[i]);

    }

    printf("%d\n",ans);

    return 0;

}

dfs5