将上述代码转换为Java语言如下:
import java.util.*;
class Main {
static class Edge implements Comparable<Edge> {
int u, v, w;
public Edge(int u, int v, int w) {
this.u = u;
this.v = v;
this.w = w;
}
@Override
public int compareTo(Edge other) {
return Integer.compare(this.w, other.w);
}
}
static List<Integer>[] ans;
static boolean[] vis;
static int[] p;
static Edge[] e;
static int n, m;
static int cnt, res;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
m = scanner.nextInt();
e = new Edge[m];
p = new int[n+1];
for (int i = 0; i < m; i++) {
int u = scanner.nextInt();
int v = scanner.nextInt();
int w = scanner.nextInt();
e[i] = new Edge(u, v, w);
}
kruskal();
scanner.close();
}
public static void kruskal() {
Arrays.sort(e);
for(int i=1;i<=n;i++)
p[i]=i;
ans=new ArrayList[n+1];
for(int i=0;i<=n;i++)
ans[i]=new ArrayList<Integer>();
for(int i=0;i<m;i++){
int u=e[i].u,v=e[i].v,w=e[i].w;
u=find(u);v=find(v);
if(u!=v){
p[u]=v;
res+=w;cnt++;
}
if(cnt==n-1)
break;
}
if(cnt!=n-1){
int pos=0;
System.out.println("NO!");
for(int i=1;i<=n;i++){
if(find(i)==i) vis[i]=true;
ans[p[i]].add(i);
}
for(int i=1;i<=n;i++){
if(vis[i]){
System.out.print(++pos + " part: ");
for(int j=0;j<ans[i].size();j++){
if(j != ans[i].size() - 1)
System.out.print(ans[i].get(j) + " ");
else
System.out.println(ans[i].get(j));
}
}
}
} else {
System.out.println("YES!");
System.out.println("Total cost: " + res);
}
}
public static int find(int x) {
if (p[x] != x)
p[x] = find(p[x]);
return p[x];
}
}
这是将C++代码转换为Java的一个简单示例,但请注意在转换过程中可能需要处理一些特定的语法差异和标准库函数的替代。
内容由零声教学AI助手提供,问题来源于学员提问