题意:求一个最小生成树,边和边权都给出了,只是输出的时候有点恶心,要求输出最大权值的边的权值,边的条数以及都是什么边
具体实现看代码吧
import java.util.Arrays;
import java.util.Scanner;
public class Main {
class Edge implements Comparable<Edge>
{
int start,end;
int value;
Edge(int start,int end,int value)
{
this.start=start;
this.end=end;
this.value=value;
}
@Override
public int compareTo(Edge o) {
if(this.value<o.value)
return -1;
else
return 1;
}
}
static int max=15010;
static Edge data[];
static int parent[]=new int[max];
static int edge;
static int node;
static int Max_value;
static int Sum_value;
static int ansdata[][]=new int [1010][2];
static void init()
{
for(int i=0;i<max;i++)
{
parent[i]=i;
}
}
static int find(int x)
{
if(x!=parent[x])
parent[x]=find(parent[x]);
return parent[x];
}
static void union(int fa,int fb)
{
parent[fa]=fb;
}
void input()
{
Scanner in=new Scanner(System.in);
node=in.nextInt();
edge=in.nextInt();
data=new Edge[edge+1];
for(int i=1;i<=edge;i++)
data[i]=new Edge(in.nextInt(),in.nextInt(),in.nextInt());
Arrays.sort(data,1,edge+1);
}
static int index;
void prim()
{
Max_value=0;
Sum_value=0;
index=0;
init();
for(int i=1;i<=edge;i++)
{
int fa=find(data[i].start);
int fb=find(data[i].end);
if(fa!=fb)
{
union(fa,fb);
index++;
Sum_value+=data[i].value;
ansdata[index][0]=data[i].start;
ansdata[index][1]=data[i].end;
if(Max_value<data[i].value)
Max_value=data[i].value;
}
}
}
void print()
{
System.out.println(Max_value);
System.out.println(index);
for(int i=1;i<=index;i++)
System.out.println(ansdata[i][0]+" "+ansdata[i][1]);
}
public static void main(String[] args) {
Main main=new Main();
main.input();
main.prim();
main.print();
}
}