danbibibi
article thumbnail

문제

문제 바로가기> BOJ 15591번: MooTube (Silver)

 

15591번: MooTube (Silver)

농부 존은 1번 동영상과 2번 동영상이 USADO 3을 가지고, 2번 동영상과 3번 동영상이 USADO 2를 가지고, 2번 동영상과 4번 동영상이 USADO 4를 가진다고 했다. 이것에 기반해서 1번 동영상과 3번 동영상의

www.acmicpc.net

 

풀이

BFS를 이용해 탐색을 진행하면서, USADO(가중치)가 k이상인지 검사 해주었다! 전체 경로에서의 최소값이 최종 USADO가 되므로, 가는 경로에서 가중치가 한번이라도 k이상이면 그 동영상은 추천 받을 수 없다.

 

#include <iostream>
#include <vector>
#include <queue>
#define MAX 5001
#define INF 1000000001
using namespace std;

int N, Q;
bool visited[MAX];
vector<pair<int, int> > path[MAX];

void input(){
    cin >> N >> Q;

    int p, q, r;
    for(int i=1; i<N; i++){ // 양방향 그래프
        cin >> p >> q >> r;
        path[p].push_back({q, r});
        path[q].push_back({p, r});
    }
}

void bfs(int k, int v){
    for(int i=1; i<=N; i++) visited[i] = false;
    visited[v] = true;

    int ans = 0;

    queue<int> q;
    q.push(v);

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

        for(int i=0; i<path[now_node].size(); i++){
            int next_node = path[now_node][i].first;
            int next_dist = path[now_node][i].second;

            if(visited[next_node]) continue;
            if(next_dist < k) continue;
            
            ans++;
            visited[next_node] = true;
            q.push(next_node);
        }
    }
    cout << ans << "\n";
}

void solution(){
    int k, v;
    while (Q--){
        cin >> k >> v;
        bfs(k, v);
    }
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    input();
    solution();
}

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

BOJ 2178번: 미로 탐색  (1) 2022.12.02
BOJ 1260번: DFS와 BFS  (0) 2022.12.02
BOJ 2579번: 계단 오르기  (0) 2022.11.30
BOJ 12865번: 평범한 배낭  (0) 2022.11.29
BOJ 1238번: 파티  (0) 2022.11.29
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로