File tree Expand file tree Collapse file tree 1 file changed +55
-0
lines changed
Expand file tree Collapse file tree 1 file changed +55
-0
lines changed Original file line number Diff line number Diff line change 1+ import java .io .*;
2+ import java .util .*;
3+
4+ public class Main {
5+
6+ public static int [] parent ;
7+
8+ public static void main (String [] args ) throws IOException {
9+ BufferedReader br = new BufferedReader (new InputStreamReader (System .in ));
10+ int N = Integer .parseInt (br .readLine ());
11+ parent = new int [N ];
12+ PriorityQueue <int []> pq = new PriorityQueue <>((o1 , o2 ) -> Integer .compare (o1 [2 ], o2 [2 ]));
13+ for (int i =0 ; i <N ; i ++) {
14+ parent [i ] = i ;
15+ StringTokenizer st = new StringTokenizer (br .readLine ());
16+ for (int j =0 ; j <N ; j ++) {
17+ int cost = Integer .parseInt (st .nextToken ());
18+ if (i < j ) {
19+ pq .add (new int []{i , j , cost });
20+ }
21+ }
22+ }
23+
24+ long minCost = 0 ;
25+ while (!pq .isEmpty ()) {
26+ int [] edge = pq .poll ();
27+ int v1 = edge [0 ];
28+ int v2 = edge [1 ];
29+ int cost = edge [2 ];
30+
31+ if (union (v1 , v2 )) {
32+ minCost += cost ;
33+ }
34+ }
35+ System .out .println (minCost );
36+ }
37+
38+ public static int find (int x ) {
39+ if (parent [x ] == x ) {
40+ return x ;
41+ }
42+ parent [x ] = find (parent [x ]);
43+ return parent [x ];
44+ }
45+
46+ public static boolean union (int x , int y ) {
47+ x = find (x );
48+ y = find (y );
49+ if (x == y ) {
50+ return false ;
51+ }
52+ parent [y ] = x ;
53+ return true ;
54+ }
55+ }
You can’t perform that action at this time.
0 commit comments