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 |