TLE求调
  • 板块CF131D Subway
  • 楼主ZMQ_Ink6556
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/4/12 19:54
  • 上次更新2024/4/12 21:12:02
查看原帖
TLE求调
1125291
ZMQ_Ink6556楼主2024/4/12 19:54

数据范围:30003000
DFS 为什么会 TLE,是卡死循环了吗?
求指正或 hack。

#include<bits/stdc++.h>
using namespace std;
int n , x , y , s;
bool a[3005][3005] , ring[3005];
int finds(int t , int last)
{
	if(ring[t])
	{
		return t; 
	}
	ring[t] = 1;
	for(int i = 1 ; i <= n ; i++)
	{
		if(a[i][t] && i != last)
		{
			return finds(i , t);
		}
	}
	ring[t] = 0;
	return 0;
}
bool dfs(int t , int last)
{
	if(ring[t])
	{
		return 1;
	}
	bool flag = 0;
	ring[t] = 1;
	for(int i = 1 ; i <= n ; i++)
	{
		if(a[i][t] && i != last)
		{
			flag = flag || dfs(i , t); 
		}
	}
	ring[t] = 0;
	if(flag)
	{
		ring[t] = 1;
	}
	return flag;
}
int ans(int t , int last)
{
	if(ring[t])
	{
		return 0;
	}
	int cnt = 2000000009;
	for(int i = 1 ; i <= n ; i++)
	{
		if(a[i][t] && i != last)
		{
			cnt = min(cnt , ans(i , t) + 1);
		}
	}
	return cnt;
}
int main()
{
	ios::sync_with_stdio(0);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	for(int i = 1 ; i <= n ; i++)
	{
		cin >> x >> y;
		a[x][y] = a[y][x] = 1;
	}
	s = finds(1 , 0);
	for(int i = 1 ; i <= n ; i++)
	{
		ring[i] = 0;
	}
	dfs(s , 0);
	for(int i = 1 ; i <= n ; i++)
	{
		cout << ans(i , 0) << ' ';
	}
	return 0;
}
2024/4/12 19:54
加载中...