编程语言:Java
题目:
题解:最后输出的代码段感觉可以优化,写的有点繁琐。
结果:AC
import java.io.*;
import java.util.*;
public class Main {
static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static Scanner sc = new Scanner(new BufferedInputStream(System.in));
static int[] pair = new int[1002];
public static void main(String[] args) throws IOException {
in.nextToken();
int n = (int) in.nval;
in.nextToken();
int m = (int) in.nval;
Arrays.fill(pair, -1);
PriorityQueue<road> que = new PriorityQueue<road>(new Comparator<road>() {
@Override
public int compare(road o1, road o2) {
return o1.cost - o2.cost;
}
});
for (int i = 0; i < m; i++) {
in.nextToken();
int s = (int) in.nval;
in.nextToken();
int e = (int) in.nval;
in.nextToken();
int cost = (int) in.nval;
que.add(new road(s, e, cost));
}
int res = 0;
while (!que.isEmpty()) {
road p = que.poll();
if (find(p.s) != find(p.e)) {
res += p.cost;
union(p.s, p.e);
}
}
boolean flag = false;
int ans = 0;
for (int i = 1; i <= n; i++) {
if (pair[i] == -1) {
ans++;
}
if (ans == 2) {
out.println(-1);
break;
}
}
if (ans < 2)
out.println(res);
out.flush();
}
static void union(int i, int j) {
i = find(i);
j = find(j);
if (i == j)
return;
else
pair[i] = j;
}
static int find(int i) {
if (pair[i] == -1)
return i;
else
return pair[i] = find(pair[i]);
}
}
class road {
int s;
int e;
int cost;
public road(int s, int e, int cost) {
this.s = s;
this.e = e;
this.cost = cost;
}
}