본문 바로가기
알고리즘 문제풀이/백준

[백준 5567] 결혼식

by m2162003 2020. 12. 29.

www.acmicpc.net/problem/5567

 

5567번: 결혼식

2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2,3,4 3명의 친구를 결혼식에 초대한다.

www.acmicpc.net

트리를 레벨별로 순회하는 문제로 생각하면 된다.

root =1 로 잡고 레벨 2가 되는 지점까지 연결된 노드수를 구한다.

 

1. 입력시 양방향 그래프 구현을 위해 벡터를 사용한다.

2. 루트노드인 1을 큐에 넣고 순회를 시작한다.

3. 레벨별 순회이므로 큐 사이즈만큼 순회한다.

#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;
int n, m;
vector<int> v[501];
bool visited[501];
int main(void)
{
  scanf("%d%d", &n, &m);

  for (int i = 0; i < m; i++)
  {
    int a, b;
    scanf("%d%d", &a, &b);
    v[a].push_back(b);
    v[b].push_back(a);
  }

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

  int level = 0;
  int res = 0;
  while (!q.empty())
  {
    int sze = q.size();
    level++;

    if (level == 3)
    {
      break;
    }
    for (int i = 0; i < sze; i++)
    {
      int cur = q.front();
      q.pop();

      for (int j = 0; j < v[cur].size(); j++)
      {
        if (visited[v[cur][j]])
          continue;
        q.push(v[cur][j]);
        visited[v[cur][j]] = true;
        res++;
      }
    }
  }

  printf("%d\n", res);
  return 0;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 1753] 최단경로  (0) 2020.12.30
[백준 2448] 별 찍기 - 11  (0) 2020.12.29
[백준 11399] ATM  (0) 2020.12.29
[백준 5545] 최고의 피자  (0) 2020.12.29
[백준 1477] 휴게소 세우기  (0) 2020.12.28

댓글