본문 바로가기
알고리즘

백준 6603 로또 (bfs)

by kcj3054 2021. 8. 23.

이 문제는 죽일 노드를 받고 리프 노도의 갯수를 구하면된다

문제 링크 : https://www.acmicpc.net/problem/6603

풀이법

이문제에서 죽이는 노드 == 탐색하지 않는 노드
이렇게 하면 그 노드를 죽이게 되어서 그 밑으로 내려가지 않게 된다.!

여기서 예외처리에서 루트노드를 죽일 수도있다는 것이다
루튼노트가 죽지 않았으면 루트부터 탐색을 수행하면된다.

#include <bits/stdc++.h>


using namespace std;

int n, Kill, rootNode, res;
vector<int> v[51];
vector<int> ans;
bool visited[51];

void bfs(int idx) {

    queue<int> q;
    q.push(idx);
    visited[idx] = 1;


    while (!q.empty())
    {
        int x = q.front();
        q.pop();

        int chidCnt = 0;
        for (int i = 0; i < v[x].size(); i++)
        {
            int nx = v[x][i];
            if (!visited[nx]) {
                visited[nx] = 1;
                q.push(nx);
                chidCnt++;
            }
        }
        if (chidCnt == 0) {
            res++;
        }
    }

}
int main() {

    cin >> n;
    for (int i = 0; i < n; i++)
    {
        int tmp = 0; cin >> tmp;
        if (tmp == -1) {
            rootNode = i;
        }
        else
        {
            v[tmp].push_back(i);
            v[i].push_back(tmp);
        }

    }
    cin >> Kill;
    visited[Kill] = 1;

    if (!visited[rootNode]) bfs(rootNode);
    cout << res;
    return 0;
}

'알고리즘' 카테고리의 다른 글

백준 2617 구슬 찾기  (0) 2021.10.03
백준 15591 MooTube (Silver)  (0) 2021.10.02
순열과 조합 (로또 : 6603) 백준  (0) 2021.08.23
leetcode , Sliding Window Maximum  (0) 2021.08.19
leetcode 239. Sliding Window Maximum  (0) 2021.08.15