์๋์ ์
๋ ฅ์ ๋ฃ์ผ๋ฉด 2๊ฐ ๋์์ผ ํ๋๋ฐ, 1์ด ์ถ๋ ฅ๋๋ค.
๋ฐํ๊ฐ์ด ์ ์ฉ๋๋ ์ฌ๊ท๋ฅผ ๋ง๋ค๊ฒฝ์ฐ, ์ด๋ฐ์์ผ๋ก ํ๊ฒ๋๋ฉด, ์์น ์๋ ๋ฐํ๊ฐ์ด ์ด์ ์ ํธ์ถํ ์ฌ๊ท์ ์ ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
: ๋ฐํ๊ฐ์ด ์๊ณ , ๋์ ๋๋ ์ฌ๊ท์ ๊ฒฝ์ฐ, ์ง๊ธ ๋ฐํ๋๋ ์ฌ๊ท๊ฐ ์ด์ ์ฌ๊ท์ ์ํฅ์ ์ค์ ์๋ฐ๋ ์๊ฐ์ ํด์ผ ํ๋ค.
์ง๊ธ์ ๊ฒฝ์ฐ, 38~39๋ฒ ์ค ์ฒ๋ผ ์ฒ๋ฆฌํ๋ฉด ์๋๋ค. -1์ ๋ถ๋ชจ๋ก ํ๋ 3๋ฒ ๋ ธ๋์ ๊ฒฝ์ฐ, 1์ด ๋ฐํ๋์ด์ผ ํ๋๋ฐ, 0์ผ๋ก ๋ฐํ๋๋ ์ํฉ์ด ๋ฐ์ํ๋ค. ...
-> ์ง๊ธ๊น์ง ์งํํ ์๊ฐ์ ๋ฒ๋ฆฌ๊ณ , ๋น ๋ฅด๊ฒ
๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ด์ผ ํ๋ค.
// ์์๋
ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํด์ parent ๋ฅผ ์ ์ฅํ๋ค.
v[๊ฐ ์ ์ ๋ฒํธ] = parent ๊ทธ๋ฐ๋ฐ ์ง๊ธ์ ๊ฒฝ์ฐ, ๋
ธ๋๋ฐฉ์์ผ๋ก ๋ชปํ๊ธฐ ๋๋ฌธ์
// ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๊ฐํ์.
: ๋ญ๊ฐ ์๋ชป๋์์๊น? ์๊ฐํด๋ณด์.
-> ์ ๊น๋ค๋กญ๋ค...
: ๊ทธ๋ฅ ๋ฌธ์ ๊ทธ๋๋ก erase ํ๋ ๊ฒ์ด ๋ง์.
: ์ ๋ ฅ์์ ๋ ๋ชจ๋ ๋ง์๋๋ฐ, ํ๋ฆผ...
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
#include <map>
#include <cstring>
#include <queue>
// 1068 ํธ๋ฆฌ
// 13:41 ~ 14:04 ๋ฐฅ ๋จน์.
// 14:26 ~
struct tree
{
int parent;
vector<int>child;
};
int res = 0;
int n;
int m;
void dfs(vector<tree>&v , int startNode)
{
if (startNode == m)
return;
if (v[startNode].child.empty())
{
//cout << "ํด๋น ๋
ธ๋์ ๋ฒํธ๋ " << startNode << endl;
++res;
return;
}
int childSize = v[startNode].child.size();
for (int i = 0; i < childSize; ++i)
{
// m์ธ ๊ณณ์ ํ์ ๋ชปํ๊ฒ ํ๋ ๊ฒ์ด ํจ์ฉ ๋์ ๋ฏํจ?
//if (v[startNode].child[i] == m)
//continue;
dfs(v, v[startNode].child[i]);
}
}
void Erase(int index, vector<tree>&v)
{
// ๋ฃจํธ๋
ธ๋๋ถํฐ ์์ํด์
// ๋
ธ๋ ์ฐพ์์ ๋ฐ์ ์๋ ๊ฒ๋ถํฐ ์ ๊ฑฐ ํด๋๊ฐ๋ ๋ฐฉ์์ผ๋ก ?
int ssize = v[index].child.size();
for (int i = 0; i < ssize; ++i)
{
if (v[index].child[i] == m - 1)
{
//v[index].child.pop_back();
}
}
}
int main()
{
// 0 ๋ฒ ๋
ธ๋์์๋ถํฐ n - 1๋ฒ ๋
ธ๋๊น์ง
cin >> n;
vector<tree>v(n);
for (int i = 0; i < n; ++i)
{
int n;
cin >> n;
v[i].parent = n;
if (n < 0)
continue;
v[n].child.push_back(i);
}
//int realNodeCnt = 0;
//for (int i = 0; i < v.size(); ++i)
//{
// int ssize = v[i].child.size();
//
// cout << i << "๋ฒ ๋
ธ๋์ ๋ถ๋ชจ๋ " << v[i].parent << endl;
// cout << i << "๋ฒ ๋
ธ๋์ ์์๋ค์ " << endl;
//
// for (int j = 0; j < ssize; ++j)
// {
// cout << v[i].child[j] << " ";
// }
// cout << endl;
//
//}
cin >> m;
dfs(v, 0);
cout << res;
}