bzoj1648

题解:

简单灌水

然后统计一下

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=20005;
int ne[N],num,fi[N],n,k,m,x,y,ans,zz[N],f[N],sum[N],x1[N];
void jb(int x,int y)
{
    ne[++num]=fi[x];
    fi[x]=num;
    zz[num]=y;
}
void dfs(int x)
{
    f[x]=1;
    sum[x]++;
    for (int i=fi[x];i;i=ne[i])
     if (!f[zz[i]])dfs(zz[i]);
}
int main()
{
    scanf("%d%d%d",&k,&n,&m);
    for (int i=1;i<=k;i++)scanf("%d",&x1[i]);
    while (m--)
     {
         scanf("%d%d",&x,&y);
         jb(x,y);
     }
    for (int i=1;i<=k;i++)
     {
         memset(f,0,sizeof f);
         dfs(x1[i]);
     } 
    for (int i=1;i<=n;i++)
     if (sum[i]==k)ans++;
    printf("%d",ans);  
    return 0; 
}
原文地址:https://www.cnblogs.com/xuanyiming/p/8462339.html