题目大意:一个有向图有 n n n个点 m m m条边,现在判断每个点的连通性,求能够到达所有n个点的点数量。
#include<bits/stdc++.h>
using namespace std;
vector<int> G[1010];
int vis[1010],sum[1010];
int ans,n,m;
void dfs(int now,int start)
{
sum[start]++;
vis[now]=1;
for(int i=0;i<G[now].size();i++)
{
int v=G[now][i];
if(vis[v]==0)
{
sum[v]++;dfs(v,start);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
G[u].push_back(v);
}
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
dfs(i,i);
}
for(int i=1;i<=n;i++)
{
if(sum[i]>=n)ans++;
//cout<<sum[i]<<" ";
}
cout<<ans;
return 0;
}