[๋ฐฑ์ค] 1043๋ฒ - ๊ฑฐ์ง๋ง (C++)
1043๋ฒ: ๊ฑฐ์ง๋ง
์ง๋ฏผ์ด๋ ํํฐ์ ๊ฐ์ ์ด์ผ๊ธฐ ํ๋ ๊ฒ์ ์ข์ํ๋ค. ํํฐ์ ๊ฐ ๋๋ง๋ค, ์ง๋ฏผ์ด๋ ์ง๋ฏผ์ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ด์ผ๊ธฐ๋ฅผ ํ๋ค. ์ง๋ฏผ์ด๋ ๊ทธ ์ด์ผ๊ธฐ๋ฅผ ๋งํ ๋, ์๋ ๊ทธ๋๋ก ์ง์ค๋ก ๋งํ๊ฑฐ๋ ์์ฒญ๋๊ฒ
www.acmicpc.net
๋ฌธ์
์ง๋ฏผ์ด๋ ํํฐ์ ๊ฐ์ ์ด์ผ๊ธฐ ํ๋ ๊ฒ์ ์ข์ํ๋ค. ํํฐ์ ๊ฐ ๋๋ง๋ค, ์ง๋ฏผ์ด๋ ์ง๋ฏผ์ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ด์ผ๊ธฐ๋ฅผ ํ๋ค. ์ง๋ฏผ์ด๋ ๊ทธ ์ด์ผ๊ธฐ๋ฅผ ๋งํ ๋, ์๋ ๊ทธ๋๋ก ์ง์ค๋ก ๋งํ๊ฑฐ๋ ์์ฒญ๋๊ฒ ๊ณผ์ฅํด์ ๋งํ๋ค. ๋น์ฐํ ๊ณผ์ฅํด์ ์ด์ผ๊ธฐํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ฌ๋ฏธ์๊ธฐ ๋๋ฌธ์, ๋๋๋ก์ด๋ฉด ๊ณผ์ฅํด์ ์ด์ผ๊ธฐํ๋ ค๊ณ ํ๋ค. ํ์ง๋ง, ์ง๋ฏผ์ด๋ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง๊ธฐ๋ ์ซ์ดํ๋ค. ๋ฌธ์ ๋ ๋ช๋ช ์ฌ๋๋ค์ ๊ทธ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ์ฌ๋๋ค์ด ํํฐ์ ์์ ๋๋, ์ง๋ฏผ์ด๋ ์ง์ค์ ์ด์ผ๊ธฐํ ์ ๋ฐ์ ์๋ค. ๋น์ฐํ, ์ด๋ค ์ฌ๋์ด ์ด๋ค ํํฐ์์๋ ์ง์ค์ ๋ฃ๊ณ , ๋๋ค๋ฅธ ํํฐ์์๋ ๊ณผ์ฅ๋ ์ด์ผ๊ธฐ๋ฅผ ๋ค์์ ๋๋ ์ง๋ฏผ์ด๋ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง๊ฒ ๋๋ค. ์ง๋ฏผ์ด๋ ์ด๋ฐ ์ผ์ ๋ชจ๋ ํผํด์ผ ํ๋ค.
์ฌ๋์ ์ N์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ ์ฌ๋์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํํฐ์ ์ค๋ ์ฌ๋๋ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ง๋ฏผ์ด๋ ๋ชจ๋ ํํฐ์ ์ฐธ๊ฐํด์ผ ํ๋ค. ์ด๋, ์ง๋ฏผ์ด๊ฐ ๊ฑฐ์ง๋ง์์ด๋ก ์๋ ค์ง์ง ์์ผ๋ฉด์, ๊ณผ์ฅ๋ ์ด์ผ๊ธฐ๋ฅผ ํ ์ ์๋ ํํฐ ๊ฐ์์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๋์ ์ N๊ณผ ํํฐ์ ์ M์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์๋ ์ด์ผ๊ธฐ์ ์ง์ค์ ์๋ ์ฌ๋์ ์์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ง์ค์ ์๋ ์ฌ๋์ ์๊ฐ ๋จผ์ ์ฃผ์ด์ง๊ณ ๊ทธ ๊ฐ์๋งํผ ์ฌ๋๋ค์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ฌ๋๋ค์ ๋ฒํธ๋ 1๋ถํฐ N๊น์ง์ ์๋ก ์ฃผ์ด์ง๋ค.
์ ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์๋ ๊ฐ ํํฐ๋ง๋ค ์ค๋ ์ฌ๋์ ์์ ๋ฒํธ๊ฐ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฃผ์ด์ง๋ค.
N, M์ 50 ์ดํ์ ์์ฐ์์ด๊ณ , ์ง์ค์ ์๋ ์ฌ๋์ ์๋ 0 ์ด์ 50 ์ดํ์ ์ ์, ๊ฐ ํํฐ๋ง๋ค ์ค๋ ์ฌ๋์ ์๋ 1 ์ด์ 50 ์ดํ์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฌธ์ ์ ์ ๋ต์ ์ถ๋ ฅํ๋ค.
ํ์ด๊ณผ์
ํด๋น ๋ฌธ์ ์ ์กฐ๊ฑด์ ์ ๋ฆฌํด๋ณด์๋ฉด.
- ์ง์ค์ ๋ค์ ์ฌ๋๋ค์ด ํํฐ์ ์์ฌ์๋ค๋ฉด ๊ทธ ํํฐ์์๋ ์ง์ค๋ง์ ์ด์ผ๊ธฐํด์ผํ๋ค.
- ์ง์ค์ ์ด์ผ๊ธฐํ ํํฐ์์๋ ํํฐ์ ์ํด ์๋ ์ฃผ๋ณ์ฌ๋๋ค๋ ์ง์ค๋ง์ ๋ค์๊ธฐ๋๋ฌธ์ ์ง์ค์ ๋ค์๋ ์ฌ๋๋ค์ด ๋ค๋ฅธ ํํฐ์ ์ํด์๋ค๋ฉด ๊ทธ ํํฐ ๋ํ ์ง์ค๋ง์ ์ด์ผ๊ธฐํด์ผํ๋ค.
์์ ๊ฐ์ ์กฐ๊ฑด์ผ๋ ๊ฑฐ์ง์ ๋งํด๋ ๋๋ ํํฐ๋ ๋ช๊ฐ์ธ๊ฐ?
๋ผ๋ ์กฐ๊ฑด์ผ๋ก ์์ ํด๋นํ๋ ๋ฌธ์ ๋ฅผ ํ์ด์ผํ๋ค.
์์ ์๋ ์์ 4๋ฒ์ ํด์ํด๋ณด์๋ฉด
1๋ฒ์ธ ์ฌ๋์ด ์ง์ค์ ๋ค์ ์ฌ๋์ด๊ณ 4๋ฒ์ธ ์ฌ๋์ด 1๋ฒ๊ณผ ๊ฐ์ ํํฐ์์ ์ด์ผ๊ธฐ๋ฅผ ๋ค์์ผ๋ 4๋ฒ๋ ์ง์ค์ ๋ค์ ์ฌ๋์ด ๋๋ค.
๊ทธ๋์
1 1 ์ 1๋ฒ๋ง ์๋ ํํฐ์ด๊ธฐ๋๋ฌธ์ ์ง์ค๋ง์ ์ด์ผ๊ธฐํด์ผํ๋ค.
1 2 ๋ 2๋ฒ๋ง ์๊ธฐ๋๋ฌธ์ ๊ฑฐ์ง์ ์ด์ผ๊ธฐํด๋ ๋๋ค.
1 3 ์ 3๋ฒ๋ง ์๊ธฐ๋๋ฌธ์ ๊ฑฐ์ง์ ์ด์ผ๊ธฐํด๋ ๋๋ค.
1 4 ์ '2 4 1' ์์ ์ง์ค์ ๋ค์๊ธฐ๋๋ฌธ์ ์ง์ค์ ์ด์ผ๊ธฐํด์ผํ๋ค.
2 4 1 ์ 4๋ฒ๊ณผ 1๋ฒ์ด ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์ง์ค์ ์ด์ผ๊ธฐํด์ผํ๋ค.
๊ทธ๋์ ์์ ์์ ์ถ๋ ฅ์ด ๊ฑฐ์ง์ธ ํํฐ๊ฐ 2๊ฐ์ด๊ธฐ๋๋ฌธ์ 2๊ฐ ๋๋ ํ์์ด๋ค.
๋ฌธ์ ์์๋ ์ ๋ ฅ๊ฐ๋ค์ ๊ทธ๋ํ๋ก ๋ณด๊ณ ๊ฐ์ฅ ์ฒ์์ ์ง์ค์ ๋ค์๋ ์ฌ๋๋ค๊ณผ ๊ฐ์ ๊ฐ์ ์ผ๋ก ๋ฌถ์ฌ์๋ ๊ฐ์ด ์๋ค๋ฉด ๊ทธ ๊ฐ๋ ์ง์ค๋ก ํ๊ณ ,
๋ชจ๋ ํํฐ๋ฅผ ๋๋ฉฐ ๋ชจ๋ ๋ค ๊ฑฐ์ง์ ๋ค์ด์ผํ๋ ์ฌ๋๋ค์ด ์์ด์ผ๋ง count๋ฅผ ์ฆ๊ฐ ์ํค๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์งํํ์๋ค.
code
#include <iostream>
#include <queue>
#include <vector>
std::vector <int> party[51];
std::vector <int> graph[51];
int trueParty[51];
void bfs()
{
int temp, node;
std::queue <int> q;
// ์ง์ค์์ด๋ค์ ๊ฐ์
for (int i = 0; i < party[0].size(); i++) {
// ์ง์ค์์ด๋ค๊ณผ ๋ฌถ์ธ ๋
ธ๋๋ค์ ๊ฐ์
for (int j = 0; j < graph[party[0][i]].size(); j++) {
q.push(graph[party[0][i]][j]);
}
}
while (!q.empty())
{
// ์ง์ค์์ด๋ค๊ณผ ์ฐ๊ฒฐ๋ ์๋ค
node = q.front();
trueParty[node] = true;
q.pop();
for (int i = 0; i < graph[node].size(); i++) {
temp = graph[node][i];
if (!trueParty[temp]) {
q.push(temp);
trueParty[temp] = true;
}
}
}
}
int main(void)
{
int n, m, t, temp, count;
std::cin >> n >> m;
for (int i = 0; i < m + 1; i++)
{
std::cin >> t;
for (int j = 0; j < t; j++) {
std::cin >> temp;
party[i].push_back(temp);
}
}
for (int i = 0; i < m + 1; i++) {
for (int j = 0; j < party[i].size(); j++) {
if (j + 1 < party[i].size()) {
graph[party[i][j]].push_back(party[i][j + 1]);
graph[party[i][j + 1]].push_back(party[i][j]);
}
}
}
bfs();
count = 0;
for (int i = 1; i < m + 1; i++) {
count++;
for (int j = 0; j < party[i].size(); j++) {
if (trueParty[party[i][j]]) {
count--;
break;
}
}
}
std::cout << count << "\n";
return (0);
}
ํ๊ธฐ
๋ฟ๋ฏํ๋ค.