Skip to content

Commit bba7978

Browse files
Update components-in-a-graph.java
1 parent 85714eb commit bba7978

File tree

1 file changed

+29
-30
lines changed

1 file changed

+29
-30
lines changed

components-in-a-graph.java

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)