题目描述:
问题思路:
点数量不多,直接暴力DFS盘他。
AC代码:
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
int n,xn,m,ans;
vector<int>vroot[1001];
char flag[1001],map[1001][1001],VISIT=char(1);
void DFS(const int&u,const int&v){//起点是u,可以到达的点v
if(flag[v]==VISIT)return;
map[u][v]=map[v][u]=flag[v]=VISIT;
for(int i=0,ni=vroot[v].size();i<ni;++i) DFS(u,vroot[v][i]);
}
int main()
{
cin>>n>>m,ans=0,xn=n+1,memset(map,0,sizeof(map));
for(int i=0,a,b;i<m;++i)cin>>a>>b,vroot[a].push_back(b);
for(int i=n;i>0;--i) map[i][0]=VISIT,memset(flag,0,sizeof(char)*xn),DFS(i,i);
string sflag=string(xn,VISIT);
for(int i=n;i>0;--i)if(sflag==string(map[i],xn))++ans;
cout<<ans<<endl;
return 0;
}