java,后四个一直MLE,请大佬帮忙看看
查看原帖
java,后四个一直MLE,请大佬帮忙看看
456432
zhou周周楼主2021/10/27 22:43

后四个一直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;
	}
}

2021/10/27 22:43
加载中...