CCF201812 JAVA

发现JAVA比C++慢了不止一星半点

C++能直接过,这个JAVA卡极限过了

第一二题,随便写一下没啥难度,直接写第4题的代码

CCF201812-4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n,m,r;
n=input.nextInt();
m=input.nextInt();
r=input.nextInt();
Point arr[]=new Point[m];
for(int i=0;i<m;i++)
arr[i]=new Point();
for(int i=0;i<m;i++){
arr[i].x=input.nextInt();
arr[i].y=input.nextInt();
arr[i].c=input.nextInt();
}
Arrays.sort(arr, new MyComprator());
int ans=0;
int k=0;
int []par=new int[m+1];
for(int i=1;i<=m;i++)par[i]=i;
for(int i=0;i<m;i++){
int x=find(arr[i].x,par),y=find(arr[i].y,par);
if(x!=y) {
par[x] = y;
ans = arr[i].c;
k++;
}
if(k==n-1)break;
}
System.out.println(ans);
}
static int find(int x,int[] par){
return x==par[x] ? x : (par[x]=find(par[x],par));
}
}

class Point{
int x,y,c;
}


class MyComprator implements Comparator {
public int compare(Object arg0, Object arg1) {
Point t1=(Point)arg0;
Point t2=(Point)arg1;
return t1.c>t2.c? 1:-1;
}
}