문제 설명

풀이 방법

spanning tree의 간선의 개수를 구하는 간단한 dfs 문제다. 

spanning tree의 간선의 개수는 dfs 또는 bfs 탐색 중 사용하는 간선을 모으면 된다.

 

코드

#include <cstdio>
#include <vector>
#include <cstring>

using namespace std;

bool visited[1003];
vector<vector<int>> v;
int ans;

void dfs(int s) {
    visited[s] = true;
    ans++;
    for (auto i : v[s]) {
        if (!visited[i]) dfs(i);
    }
}

int main() {
    int T; scanf("%d", &T);
    while (T--) {
        int N, M; scanf("%d %d", &N, &M);
        v.clear(); v.resize(N + 1);
        memset(visited, false, sizeof(visited));
        while (M--) {
            int s, e; scanf("%d %d", &s, &e);
            v[s].push_back(e); v[e].push_back(s);
        }
        ans = 0;
        dfs(1);
        printf("%d\n", ans - 1); // ans은 노드의 개수이기 때문에 ans-1
    }
}

문제 링크 : acmicpc.net/problem/9372

'Algorithm > BOJ' 카테고리의 다른 글

백준[2887] 행성터널  (0) 2021.06.22
백준[1774] 우주신과의 교감  (0) 2021.06.22
백준[4386] 별자리 만들기  (0) 2021.06.22
백준[20040] 사이클게임  (0) 2021.06.21
백준[2629] 양팔저울  (1) 2021.05.03
복사했습니다!