为什么会超时,求大佬看看 Floyd
查看原帖
为什么会超时,求大佬看看 Floyd
636793
claudias楼主2023/3/29 20:40
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main{
	static Read sc=new Read(System.in);
	static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));
	static int n,m;
	static int[] t=new int[205];
	static int[][] map=new int[205][205];
	public static void main(String[] args) {
		n=sc.nextInt();
		m=sc.nextInt();
		for(int i=0;i<n;i++)
			t[i]=sc.nextInt();
		for(int i=0;i<n;i++) 
			for(int j=0;j<n;j++)
				if(i==j) map[i][j]=0;
				else map[i][j]=0x3f3f3f;
		for(int i=1;i<=m;i++) {
			int a=sc.nextInt(),b=sc.nextInt(),c=sc.nextInt();
			map[a][b]=map[b][a]=Math.min(map[a][b], c);
		}
		int q=sc.nextInt();
		while(q-->0) {
			int now=0;
				int a=sc.nextInt(),b=sc.nextInt(),k=sc.nextInt();
				while(t[now]<=k&&now<n) {
					floyd(now);
					now++;
				}
				if(t[a]>k||t[b]>k) out.println(-1);
				else if(map[a][b]==0x3f3f3f) out.println(-1);
				else out.println(map[a][b]);
			}
			
		out.flush();
	}
	public static void floyd(int k) {
		for(int i=0;i<n;i++) {
			for(int j=0;j<n;j++)
				if(map[i][j]>map[i][k]+map[k][j])
				map[i][j]= map[i][k]+map[k][j];
		}
	}
	static class Read{
		BufferedReader br;
		StringTokenizer st;
		public Read(InputStream in) {
			br=new BufferedReader(new InputStreamReader(in),16384);
			eat("");
		}
		public void eat(String s) {
			st=new StringTokenizer(s);
		}
		public String nextLine() {
			try {
				return br.readLine();
			} catch (Exception e) {
				return null;
				// TODO: handle exception
			}
		}
		public boolean hasNext() {
			while(!st.hasMoreTokens()) {
				String s=nextLine();
				if(s==null) return false;
			eat(s);
			}
			return true;
		}
		public String next() {
			hasNext();
			return st.nextToken();
		}
		public int nextInt() {
			return Integer.parseInt(next());
		}
	}
}
2023/3/29 20:40
加载中...