求助!20分TLE
查看原帖
求助!20分TLE
873417
Istruggle楼主2022/12/21 10:39

求助大佬,有哪些地方可以优化,严重超时

#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;
}
2022/12/21 10:39
加载中...