728x90
import java.util.*;
public class Main{
static int test = 0;
static int[] building;
static int[] x;
static int[] y;
static double[][] map;
static int[] visit;
public static void main(String args[]) throws Exception {
building = new int[501];
visit = new int[501];
x = new int[501];
y = new int[501];
map = new double[501][501];
Scanner scanner = new Scanner(System.in);
test = scanner.nextInt();
int M,N;
int a,b;
for(int i = 0; i < test; i++){
double result = 0;
for(int j = 0; j < map.length; j++)
Arrays.fill(map[j], 1);
N = scanner.nextInt();
M = scanner.nextInt();
for(int j = 0; j < N; j++)
x[j] = scanner.nextInt();
for(int j = 0; j < N; j++)
y[j] = scanner.nextInt();
for(int j = 0; j < M; j++){
a = scanner.nextInt();
b = scanner.nextInt();
map[a][b] = 0;
map[b][a] = 0;
}
distance(N);
result = prem(N);
System.out.println(result);
}
}
static void distance(int N){
double value;
for(int i = 0; i < N-1; i++)
for(int j = i+1; j < N; j++){
if(map[i][j] != 0){
value = Math.sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
map[i][j] = value;
map[j][i] = value;
}
}
}
static double prem(int N){
double sum = 0;
int [] visit;
double [] length;
visit = new int[501];
length = new double[501];
Arrays.fill(visit, 0);
Arrays.fill(length, 0x7fffffff);
length[0] = 0;
for(int i = 0; i < N; i++){
int now = 0;
double nowd = 0x7fffffff;
for(int j = 0; j < N; j++){
if(length[j] < nowd && visit[j] == 0){
now = j;
nowd = length[j];
}
}
if(nowd == 0x7fffffff)
break;
visit[now] = 1;
sum += nowd;
for(int j = 0; j < N; j++){
if(map[now][j] < length[j]){
length[j] = map[now][j];
}
}
}
return sum;
}
}
728x90
'코딩' 카테고리의 다른 글
알고스팟 자바(java) 해답 : TPATH (0) | 2021.05.14 |
---|---|
알고스팟 자바(java) 해답 : ARCTIC (0) | 2021.05.14 |
알고스팟 자바(java) 해답 : FIRETRUCKS (0) | 2021.05.14 |
알고스팟 자바(java) 해답 : ROUTING(error) (0) | 2021.05.14 |
알고스팟 자바(java) 해답 : TILING2 (0) | 2021.05.14 |