dfs20分TLE,大佬们看看哪里还能优化时间复杂度
查看原帖
dfs20分TLE,大佬们看看哪里还能优化时间复杂度
886012
shuaishuaiqi楼主2023/3/10 12:35
#include<iostream>
using namespace std;
const int mod = 80112002;
int n, m;
long long t;
bool eat[5010][5010],dingdian[5010];
void check(int s)
{
	for (int i = 1;i <= n;i++)
	{
		if (eat[s][i])
		{
			dingdian[s] = false;
			return;
		}
	}
	dingdian[s]=true;
	return;
}
void dfs(int u)
{
	if (dingdian[u])//到食物链的尽头,u不会捕食其他
	{
		t++;
		t %= mod;
		return;
	}
	for (int i = 1;i <= n;i++)
	{
		if (eat[u][i])//找到被u吃的i再接着找被i吃的
		{
			dfs(i);
		}
	}
}
int main()
{
	cin >> n >> m;
	while (m--)
	{
		int beichi, chi;
		cin >> beichi >> chi;
		eat[chi][beichi] = true;
	}
	for (int i = 1;i <= n;i++)
	{
		check(i);//找食物链的终点都有哪些
	}
	for (int i = 1;i <= n;i++)//找食物链的起点,从它开始递归
	{
		bool k = true;
		for (int j = 1;j <= n;j++)//从i开始,其他不会捕食i
		{
			if (eat[j][i])
			{
				k = false;
				break;
			}
		}
		if (k)
		{
			dfs(i);
		}
	}
	cout << t;
	return 0;
}
2023/3/10 12:35
加载中...