求助大佬,有哪些地方可以优化,严重超时
#include<bits/stdc++.h>
using namespace std;
int a[5005][5005],n,m;
int ans=0;
inline int read()
{
int x=0,y=1;char c=getchar();
while (c<'0'||c>'9') {if (c=='-') y=-1;c=getchar();}
while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x*y;
}
bool pd(int x)
{
for(int i =1;i<=n;i++)
{
if(a[x][i]==1) return false;
}
return true;
}
bool pd_(int x)
{
for(int i =1;i<=n;i++)
{
if(a[i][x]==1) return false;
}
return true;
}
void dfs(int x)
{
if(pd(x))
{
ans++;
return;
}
for(int i = 1;i <= n;i++)
{
if(a[x][i] == 1)
{
a[x][i]=0;
dfs(i);
a[x][i]=1;
}
}
}
int main()
{
n=read();m=read();
int z,v;
for(int i = 1;i<=m;i++)
{
z=read();v=read();
a[v][z] = 1;
}
for(int i =1;i<=n;i++)
{
if(pd_(i))
{
dfs(i);
}
}
cout<<ans% 80112002;
return 0;
}