https://www.acmicpc.net/problem/9466
λ¬Έμ
μ΄λ² κ°μνκΈ°μ 'λ¬Έμ ν΄κ²°' κ°μλ₯Ό μ μ²ν νμλ€μ ν νλ‘μ νΈλ₯Ό μνν΄μΌ νλ€. νλ‘μ νΈ νμ μμλ μ νμ΄ μλ€. μ¬μ§μ΄ λͺ¨λ νμλ€μ΄ λμΌν νμ νμμΈ κ²½μ°μ κ°μ΄ ν νλ§ μμ μλ μλ€. νλ‘μ νΈ νμ ꡬμ±νκΈ° μν΄, λͺ¨λ νμλ€μ νλ‘μ νΈλ₯Ό ν¨κ»νκ³ μΆμ νμμ μ νν΄μΌ νλ€. (λ¨, λ¨ ν λͺ λ§ μ νν μ μλ€.) νΌμ νκ³ μΆμ΄νλ νμμ μκΈ° μμ μ μ ννλ κ²λ κ°λ₯νλ€.
νμλ€μ΄(s1, s2, ..., sr)μ΄λΌ ν λ, r=1μ΄κ³ s1μ΄ s1μ μ ννλ κ²½μ°λ, s1μ΄ s2λ₯Ό μ ννκ³ , s2κ° s3λ₯Ό μ ννκ³ ,..., sr-1μ΄ srμ μ ννκ³ , srμ΄ s1μ μ ννλ κ²½μ°μλ§ ν νμ΄ λ μ μλ€.
μλ₯Ό λ€μ΄, ν λ°μ 7λͺ μ νμμ΄ μλ€κ³ νμ. νμλ€μ 1λ²λΆν° 7λ²μΌλ‘ ννν λ, μ νμ κ²°κ³Όλ λ€μκ³Ό κ°λ€.
12345673 | 1 | 3 | 7 | 3 | 4 | 6 |
μμ κ²°κ³Όλ₯Ό ν΅ν΄ (3)κ³Ό (4, 7, 6)μ΄ νμ μ΄λ£° μ μλ€. 1, 2, 5λ μ΄λ νμλ μνμ§ μλλ€.
μ£Όμ΄μ§ μ νμ κ²°κ³Όλ₯Ό λ³΄κ³ μ΄λ νλ‘μ νΈ νμλ μνμ§ μλ νμλ€μ μλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νλΌ.
μ λ ₯
첫째 μ€μ ν μ€νΈ μΌμ΄μ€μ κ°μ Tκ° μ£Όμ΄μ§λ€. κ° ν μ€νΈ μΌμ΄μ€μ 첫 μ€μλ νμμ μκ° μ μ n (2 ≤ n ≤ 100,000)μΌλ‘ μ£Όμ΄μ§λ€. κ° ν μ€νΈ μΌμ΄μ€μ λμ§Έ μ€μλ μ νλ νμλ€μ λ²νΈκ° μ£Όμ΄μ§λ€. (λͺ¨λ νμλ€μ 1λΆν° nκΉμ§ λ²νΈκ° λΆμ¬λλ€.)
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€λ§λ€ ν μ€μ μΆλ ₯νκ³ , κ° μ€μλ νλ‘μ νΈ νμ μνμ§ λͺ»ν νμλ€μ μλ₯Ό λνλ΄λ©΄ λλ€.
νμ΄
κΈ°λ³Έ μ κ·Όλ°©μμ 1μ°¨μ dfs
μ¬μ΄ν΄μ μ°Ύμλ΄μ μ¬μ΄ν΄μ μν νμλ€μ μλ₯Ό μΉ΄μ΄νΈ
μ΄ν μ 체 νμ - μ¬μ΄ν΄μ μν νμ μ 리ν΄
#include <iostream>
#include <vector>
using namespace std;
int n, teamed;
vector<int> v;
vector<bool> visit;
vector<bool> finished;
void dfs(int cur) {
visit[cur] = true;
int next = v[cur];
if(!visit[next]) // μμ§ λ°©λ¬Ένμ§ μμμ κ²½μ°
dfs(next);
else if(!finished[next]) { // λ°©λ¬Ένλλ° ν μλ κ²½μ°
teamed++; // curμ νμ μν©λλ€
for(int i=next; i!=cur; i = v[i]) // nextλΆν° μ¬μ΄ν΄μ μν νμ μ μΉ΄μ΄νΈ
teamed++;
}
finished[cur] = true; // νμ μ
}
int main() {
int t;
cin >> t;
while(t--) {
// μ
λ ₯
cin >> n;
v.assign(n+1, 0);
for(int i=1; i<=n; i++)
cin >> v[i];
// μ°μ°
teamed = 0;
visit.assign(n+1, false);
finished.assign(n+1, false);
for(int i=1; i<=n; i++) {
if(!visit[i])
dfs(i);
}
// μΆλ ₯
cout << n-teamed << "\n";
}
return 0;
}
'π Baaaaaarking > 0x09κ° - BFS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ G4][C++] λ°±μ€ 1600λ² : λ§μ΄ λκ³ ν μμμ΄ (λ©λͺ¨λ¦¬μ΄κ³Όλ무μ«μ΄) (0) | 2022.04.17 |
---|---|
[BOJ G5][C++] λ°±μ€ 13549λ² : μ¨λ°κΌμ§ 3 (λ°νμμλ¬μμμ μ) (0) | 2022.04.16 |
[BOJ G4][C++] λ°±μ€ 2573λ²: λΉμ° (0) | 2022.04.15 |
[BOJ G4][C++] λ°±μ€ 2206λ² : λ²½ λΆμκ³ μ΄λνκΈ° (0) | 2022.04.13 |
[BOJ S1][C++] 2468λ²: μμ μμ (76%) (0) | 2022.04.07 |