20分TLE求助
查看原帖
20分TLE求助
614714
Yuyuiuy楼主2022/7/27 18:28

没开O2优化是TLE,开了氧气优化报RE。

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
struct node
{
	int start ;
	int end ;
} ;
bool cmp(node a , node b)
{
	if(a.start != b.start)
		return a.start < b.start ;
	return a.end > b.end ;
}
const int N = 1e5 + 10 ;
const int M = 1e6 + 10 ;
node input[M] ;
int h[N] , e[N] , ne[M] , idx ;
void add(int a , int b)
{
	e[idx] = b , ne[idx] = h[a] , h[a] = idx++ ;
}

bool vis[N] ;
void dfs(int point)
{
	std::cout<<point<<' ' ;
	for(int i = h[point] ; i != -1 ; i = ne[i])
	{
		if(vis[e[i]])
			continue ;
		vis[e[i]] = true ;
		dfs(e[i]) ;
	}
	return ;
}
void bfs()
{
	std::queue<int> q ;
	q.push(1) ;
	vis[1] = true ;
	while(q.size())
	{
		int t = q.front() ;
		q.pop() ;
		for(int i = h[t] ; i != -1 ; i = ne[i])
		{
			if(vis[e[i]])
				continue ;
			std::cout<<e[i]<<' ' ;
			vis[e[i]] = true ;
			q.push(e[i]) ;
		}
	}
	return ;
}
using namespace std ;
int main()
{
	memset(h , -1 , sizeof(h)) ;
	int n , m ;//文章,参考文献关系 
	scanf("%d%d" , &n , &m) ;
	for(int i = 1 ; i <= m ; i++)
		scanf("%d%d" , &input[i].start , &input[i].end) ;
	sort(input + 1 , input + m + 1 , cmp) ;
	for(int i = 1 ; i <= m ; i++)
		add(input[i].start , input[i].end) ;
	
	memset(vis , false , sizeof(vis)) ;
	vis[1] = true ;
	dfs(1) ;
	memset(vis , false , sizeof(vis)) ;
	cout<<endl ;
	cout<<1<<' ' ;
	bfs() ;
	cout<<endl ;

	return 0 ;
}

会不会是用sort排序太慢了?求助

2022/7/27 18:28
加载中...