没想到能这么暴力就过去,我害怕时间复杂度不够,因为看到了10000条边就没想着一遍一遍的dfs,有大佬能仔细说下这种遍历的复杂度如何算的呢?
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
string s;
int n,t,a[N],f[N],res,num,ans,m,k;
int e[N],ne[N],h[N],idx;
bool vis[N],st[N];
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u)
{
for(int i=h[u];~i;i=ne[i])
{
int j=e[i];
if(vis[j]) continue;
vis[j]=true;
dfs(j);
}
}
signed main()
{
std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>k>>n>>m;
memset(h,-1,sizeof h);
for(int i=1;i<=k;i++) cin>>a[i],st[a[i]]=true;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
add(v,u);
}
for(int i=1;i<=n;i++){
int num=0;
memset(vis,false,sizeof vis);
dfs(i);
bool f=false;
vis[i]=true;
for(int j=1;j<=n;j++)
if(st[j]&&!vis[j]) f=true;
if(!f) res++;
}
cout<<res;
return 0;
}