- Today
- Total
- μλ£κ΅¬μ‘°
- database
- spring
- μ‘Έμ μν
- Algorithm
- λ°μ΄ν°λ² μ΄μ€
- CS
- λ€μ΅μ€νΈλΌ
- leetcode
- 그리λ
- μμμ λ ¬
- tree
- dp
- PS
- μλ°μμ μ
- νλ‘κ·Έλλ¨Έμ€
- OOP
- 벨λ§ν¬λ
- MST
- ꡬν
- Graph
- μΈν΄
- μλ°
- java
- λ¬Έλ²
- λ°±μ€
- array
- BFS
- pytorch
- λ°±μλ
Partially Committed
[Union and Find] λ°±μ€ 20040 μ¬μ΄ν΄ κ²μ λ³Έλ¬Έ
[Union and Find] λ°±μ€ 20040 μ¬μ΄ν΄ κ²μ
WonderJay 2023. 3. 7. 08:44https://www.acmicpc.net/problem/20040
N λͺ μ μ μκ° μ λΆμ λ²κ°μκ°λ©΄μ 그리λ κ²μμ M μ°¨λ‘κΉμ§ μ§ννμ λ,
μ€κ°μ μ¬μ΄ν΄μ΄ μκΈ΄λ€λ©΄ μ¬μ΄ν΄μ΄ μκ²Όλ νμ°¨λ₯Ό,
M λ² μ§ννλ λμ μ¬μ΄ν΄μ΄ λ°μνμ§ μμλ€λ©΄ 0 μ μΆλ ₯νλ©΄ λλ€.
μμ λ₯Ό ν΅ν΄ μκ°ν΄λ³΄μ.
0 κ³Ό 1 μ μ ννμ¬ 0-1 μ λΆμ κΈλλ€λ κ²μ 0 κ³Ό 1 μ κ°μ μ§ν©μΌλ‘ Clustering λλ€λ κ²μ΄λ€.
m λ²μ νμ°¨λ§λ€ μ£Όμ΄μ§λ λ ν¬μΈνΈλ₯Ό κ°μ μ§ν©μΌλ‘ Clustering νλ μμ μ κ±°μΉ λ, μ¬μ΄ν΄μ μ΄λ£¨λ κ²½μ°κ° μμΌλ―λ‘ λ΅μ 0 μ΄λ€.
λ§μ°¬κ°μ§λ‘ m λ²μ νμ°¨λ§λ€ μ£Όμ΄μ§λ λ μ μ νλμ μ§ν©μΌλ‘ clustering μ μ§ννλ€.
κ·Έλ¬λ€ 보면 m = 4 μΌ λ, μ΄λ―Έ κ°μ μ§ν©μ λμΈ λ ν¬μΈνΈλ₯Ό κ°μ μ§ν©μΌλ‘ clustering νλ μν©μ΄ λ°μνλ©° μ΄λ¬ν κ²½μ°μλ μ¬μ΄ν΄μ΄ λ°μν κ²μ΄λΌκ³ ν μ μλ€. μλλ©΄ 0 -> 1-> 3-> 0 μ μν κ΅¬μ‘°κ° νμ±λμκΈ° λλ¬Έμ΄λ€.
λ¬Έμ μν©μ μ΄ν΄νκ³ , μ΄λ₯Ό μ΄λ»κ² ꡬνν κΉ?
κ°μ μ§ν©μΌλ‘ ν©μΉκ³ , μ°Ύκ³ μ΄λ° μ°μ°μ λ°λ³΅ν΄μΌ νλλ°..
κ·Έλ¬λ©΄ μ λμ¨ νμΈλλ₯Ό μ¬μ©ν μ μκ² λ€.
μκ°λ³΅μ‘λλ₯Ό μκ°ν΄λ³΄λ©΄,
union μ°μ°μ find μ°μ°μ μ μ μΌλ‘ μμ‘΄νλλ°
find μ°μ°μ ꡬνν λ κ²½λ‘λ₯Ό λ¨μΆμμΌ μκ°λ³΅μ‘λλ₯Ό μ€μ΄λ λ°©λ²μ΄ 보νΈνλμ΄μλ€.
κ·Έλ κ² νμ λμ μκ° λ³΅μ‘λλ μ μ»€λ§ ν¨μλ₯Ό μ΄μ©νμ¬ O(a(N)) μ΄λΌκ³ νλ€.
x κ° 2^65536 μΌ λ a(x) μ΄ 5 κ° λλ€κ³ νλ―λ‘ O(a(N)) ~= O(1) μ΄λΌκ³ μκ°ν΄λ 무리λ μκ² λ€.
κ·Έλ¬λ―λ‘, μ λμ¨ νμΈλλ₯Ό μ¬μ©ν΄λ
μκ° λ³΅μ‘λμ μ ν μμ΄ ν΄κ²°μ΄ κ°λ₯ν κ²μ΄λΌλ κ²μ μμν μ μλ€.
μ 체 μ½λλ μλμ κ°λ€.
import java.io.*;
import java.util.*;
public class Main {
static int n; // μ μ κ°μ
static int m; // νμ¬ μ§νλ μ°¨λ‘μ μ
static int[] parent;
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk;
stk = new StringTokenizer(br.readLine());
n = Integer.parseInt(stk.nextToken());
m = Integer.parseInt(stk.nextToken());
parent = new int[n];
for (int i = 0; i < n; i++) {
parent[i] = i;
}
int ans = 0;
for (int i = 1; i <= m; i++) {
stk = new StringTokenizer(br.readLine());
int a = Integer.parseInt(stk.nextToken());
int b = Integer.parseInt(stk.nextToken());
if(isitsame(a, b)){
ans = i;
break;
} else {
union(a, b);
}
}
bw.write(ans+"\n");
bw.flush();
bw.close();
}
private static void union(int a, int b){
a = find(a);
b = find(b);
if(a!=b){
parent[b] = a;
}
}
private static int find(int a){
if(parent[a] == a){
return a;
} else {
return parent[a] = find(parent[a]);
}
}
private static boolean isitsame(int a, int b){
a = find(a);
b = find(b);
if(a==b){
return true;
} else return false;
}
}
'π₯ Algorithm || λ¬Έμ νμ΄ > PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[InOrder μ PostOrder λ‘λΆν° PreOrder ꡬνκΈ°] λ°±μ€ 2263 νΈλ¦¬μ μν (JAVA) (0) | 2023.03.22 |
---|---|
[νΈλ¦¬μ μ§λ¦ ꡬνκΈ°] λ°±μ€ 1167 (JAVA) - dfs / λ€μ΅μ€νΈλΌ (0) | 2023.03.20 |
[Meet in the middle] λ°±μ€ 1450 λ μ λ¬Έμ (0) | 2023.03.06 |
[λ°±μ€ 13549/1956/1620/2629] μλ° (0) | 2023.02.22 |
[νλ‘κ·Έλλ¨Έμ€] μΉ΄λλμΉ (JAVA) (1) | 2023.02.20 |