没开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排序太慢了?求助