P2853 [USACO06DEC]Cow Picnic S

  • 从k个奶牛分别dfs,用cnt[i]表示第i个牧场可以被多少头奶牛抵达,只有cnt[i]==k的牧场满足条件。
const int N=1010;
vector<int> g[N];
int cow[110];
int cnt[N];
bool vis[N];
int k,n,m;

void dfs(int u)
{
    vis[u]=true;
    cnt[u]++;

    for(int i=0;i<g[u].size();i++)
    {
        int j=g[u][i];
        if(vis[j]) continue;
        dfs(j);
    }
}

int main()
{
    cin>>k>>n>>m;

    for(int i=0;i<k;i++) cin>>cow[i];

    while(m--)
    {
        int a,b;
        cin>>a>>b;
        g[a].push_back(b);
    }

    for(int i=0;i<k;i++)
    {
        memset(vis,0,sizeof vis);
        dfs(cow[i]);
    }

    int res=0;
    for(int i=1;i<=n;i++)
        if(cnt[i] == k)
            res++;

    cout<<res<<endl;

    //system("pause");
}
原文地址:https://www.cnblogs.com/fxh0707/p/13601015.html