后四个一直MLE,请大佬帮忙看看
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
static int N=(int) (1e6+10);
static int indx=0,num=0;
static int []h=new int [N],ne=new int [N],to=new int [N];
static StringBuilder sb1=new StringBuilder("");
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
String ttt[]=br.readLine().split(" ");
int n=Integer.parseInt(ttt[0]);
int m=Integer.parseInt(ttt[1]);
ArrayList<Integer> lu[]=new ArrayList [n+1];
for (int i = 0; i < lu.length; i++) {
lu[i]=new ArrayList<Integer>();
}
for(int i=0;i<m;i++) {
String zzz[]=br.readLine().split(" ");
int a=Integer.parseInt(zzz[0]);
int b=Integer.parseInt(zzz[1]);
lu[a].add(b);
}
for (int i = 1; i < lu.length; i++) {
Collections.sort(lu[i],new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o2-o1;
}
});
}
for (int i = 1; i <= n; i++) {
for (Integer t : lu[i]) {
add(i,t);
}
}
int []st=new int [n+1];//标记数组
dfs(st,n,1);
System.out.println(sb1);
bfs(st,n,1);
br.close();
}
private static void bfs(int[] st, int n, int i) throws IOException {
int arr[] = new int [n+10];int tt=-1,hh=0;
StringBuilder sb=new StringBuilder("");
arr[++tt]=1;
st[1]=0;
while(hh<=tt) {
int z=arr[hh++];
for (int j = h[z]; j!=0; j=ne[j]) {
int zz=to[j];
if(st[zz]==0) continue;
st[zz]=0;
arr[++tt]=zz;
}
sb.append(z).append(" ");
}
System.out.println(sb);
}
private static void dfs(int[] st, int n, int jud) throws IOException {
sb1.append(jud).append(" ");
st[jud]=1;
for (int i = h[jud]; i != 0; i=ne[i]) {
if(st[to[i]]==1) continue;
num++;
st[to[i]]=1;
dfs(st, n, to[i]);
if(num==n) return;
}
}
private static void add(int a, int b) {
to[++indx]=b;
ne[indx]=h[a];
h[a]=indx;
}
}