Baekjoon

Baekjoon 15591번 MooTube (Silver)

ppwag 2020. 10. 19. 13:09

문제

https://www.acmicpc.net/problem/15591

걸린 시간

- 실패

풀이

C++

#include <bits/stdc++.h>
#define INF 1e9
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int usado[5001][5001];
int visited[5001];
vector<int> adj[5001];

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int N, Q;
    cin >> N >> Q;
    memset(usado, 0, sizeof(usado));
    int p, q, r;
    for(int i = 0; i < N-1; i++){
        cin >> p >> q >> r;
        usado[p][q] = r;
        usado[q][p] = r;
        adj[p].push_back(q);
        adj[q].push_back(p);
    }
    int k, v;
    for(int i = 0; i < Q; i++){
        cin >> k >> v;
        int cnt = 0;
        memset(visited, 0, sizeof(visited));
        queue<int> q;
        q.push(v);
        visited[v] = 1;
        while(!q.empty()){
            int here = q.front();
            q.pop();
            for(int i = 0; i < adj[here].size(); i++){
                int next = adj[here][i];
                if(usado[here][next] < k) continue;
                if(!visited[next]){
                    cnt++;
                    q.push(next);
                    visited[next] = 1;
                }
            }
        }
        cout << cnt << "\n";
    }
    return 0;
}

미리 USADO 를 모두 구해놓으면 시간초과가 난다.

USADO 는 구하려는 두 쌍 사이의 모든 USADO 중 최소값이다. USADO 가 k 이상인 동영상의 개수를 구하는 것이 목적이므로, k 미만인 USADO 가 탐색 중 한번이라도 등장하였다면 그 이후의 동영상들은 k 이상의 값을 가질 수 없다는 뜻이므로 더 이상 탐색할 필요가 없게 된다.

k값과 동영상의 번호(v)가 주어지면 v를 기준으로 USADO 가 k 이상인 경로에 대해서만 탐색을 진행하면 시간초과가 나지 않게 된다.

'Baekjoon' 카테고리의 다른 글

Baekjoon 16918번 봄버맨  (0) 2020.10.19
Baekjoon 17780번 새로운 게임  (0) 2020.10.19
Baekjoon 10021번 Watering the Fields  (0) 2020.10.15
Baekjoon 11967번 불켜기  (0) 2020.10.14
Baekjoon 7575번 바이러스  (0) 2020.10.14

댓글