@@ -8,47 +8,46 @@ public class Solution {
88 public static void main (String [] args ) {
99 Scanner sc = new Scanner (System .in );
1010 int n = sc .nextInt ();
11- int g [] = new int [n +1 ];
12- int b [] = new int [n +1 ];
1311 UF uf = new UF ();
14- uf .init (g , b , n );
12+ uf .init (2 * n );
1513 for (int i = 1 ; i <=n ; i ++) {
16- g [i ] = sc .nextInt ();
17- b [i ] = sc .nextInt ();
18- uf .union (g , b , g [i ], g [i -1 ]);
19- uf .union (g , b , b [i ], b [i -1 ]);
20- uf .union (g , b , g [i ], b [i ]);
14+ int g = sc .nextInt ();
15+ int b = sc .nextInt ();
16+ uf .union (g , b );
2117 }
22- System .out .println (UF .maxSize + " " + UF .minSize );
18+ int maxSize = Integer .MIN_VALUE , minSize = Integer .MAX_VALUE ;
19+ for (int i = 1 ; i <= 2 *n ; i ++) {
20+ int p = uf .find (i );
21+ int s = uf .size [p ];
22+ if (s > 1 ) {
23+ if (minSize > s ) minSize = s ;
24+ if (maxSize < s ) maxSize = s ;
25+ }
26+ }
27+ System .out .println (minSize + " " + maxSize );
2328 }
2429
2530 static class UF {
26- int parent [] = new int [30001 ];
27- int size [] = new int [30001 ];
28- static int maxSize = 0 , minSize = Integer .MAX_VALUE ;
29- public void init (int g [], int b [], int n ) {
30- for (int i = 0 ; i < n ; i ++) {
31- parent [g [i ]] = g [i ];
32- size [g [i ]] = 1 ;
33- parent [b [i ]] = b [i ];
34- size [b [i ]] = 1 ;
31+ static final int MAXN = 30001 ;
32+ int parent [] = new int [MAXN ];
33+ int size [] = new int [MAXN ];
34+
35+ public void init (int n ) {
36+ for (int i = 1 ; i <= n ; i ++) {
37+ parent [i ] = i ;
38+ size [i ] = 1 ;
3539 }
3640 }
37- public void union (int g [], int b [], int u , int v ) {
41+ public void union (int u , int v ) {
3842 int i = find (u );
3943 int j = find (v );
44+ // System.out.println("u= " + u + ", v= " + v + ", i= " + i + ", j= " + j);
4045 if (i == j ) return ;
41- if (size [u ] > size [v ]) {
42- parent [v ] = parent [u ];
43- size [u ] += size [v ];
44- if (size [u ] > maxSize ) maxSize = size [u ];
45- if (size [u ] < minSize ) minSize = size [u ];
46- } else {
47- parent [u ] = parent [v ];
48- size [v ] += size [u ];
49- if (size [v ] > maxSize ) maxSize = size [v ];
50- if (size [v ] < minSize ) minSize = size [v ];
51- }
46+ parent [i ] = j ;
47+ size [j ] += size [i ];
48+ // System.out.println("size[" + j + "]= " + size[j]);
49+ // if (size[j] > maxSize) maxSize = size[j];
50+ // if (size[j] < minSize) minSize = size[j];
5251 }
5352 public int find (int u ) {
5453 if (parent [u ] == u ) return u ;
0 commit comments