Compy's Blog
469 words
2 minutes
[BOJ] 중량제한
2026-03-20

중량제한

TimeLimitMemoryLimitConditionTAG
1s128MB(2 ≤ N ≤ 10,000, 1 ≤ A, B ≤ N, 1 ≤ C ≤ 1,000,000,000)BFS

처음 풀이법이 그냥 맞았는데 메모리 초과가 뜸.. 알고보니까 1000인 줄 알았는데 10000이어서 메모리 초과 나는거를 나는 뭐 또 queue에 많이 들어가는 줄 알았네.. ㅠㅜ

또 바꾼 것도 어이가 없긴 하지만 좀 이상하게 풀어버리면서 시간이 좀 걸린 케이스 1시간 컷일 줄 알았는데.. 머 그래도 멀티 테스킹하면서 풀어본 문제라 그렇게 늦게 푼것 같지도 않네요. (사실 bfs 기본 문제라서 오래 걸린게 맞음 ㅠ)

정답 코드

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <sstream>
#include <iomanip>
#include <string>
#include <numeric>
#include <unordered_set>
#include <unordered_map>
#include <climits>
#include <math.h>
using namespace std;
using ll = long long;
using ld = long double;
ll MOD = 1'000'000'000 + 7;
int inf = 1 << 30;

using namespace std;
int n, m;

int start, finish;


vector<pair<int, int>> nodes[10'001]; // 크기가 1000인줄
int visited[10'001];

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    cin >> n >> m;
    
    
    for(int i = 1; i <= n; i++){
        visited[i] = 0;
    }
    for(int i = 0; i < m; i++){
        int a, b, c;
        
        cin >> a >> b >> c;
//        cout << a << " " << b << " " << c << "\n";
        // 일단 중복 무시하고 짜보고 걸리면 set으로
        nodes[a].push_back({b, c});
        nodes[b].push_back({a, c});
    
        
    }
    
    
    
    
    cin >> start >> finish;
    
    priority_queue<pair<int, int>> q; // max heap이다
    
    q.push({1'000'000'000, start});
    
    visited[start] =1'000'000'000;
    while(!q.empty()){
        auto [cost, node] = q.top(); q.pop();
        
        if(node == finish) { // 무조건 작아질 수밖에 없는 구조에서 먼저 도착하면 maxheap이므로 그냥 이게 정답
            cout << cost;
            return 0;
        }
        for(pair<int, int> next : nodes[node]){
            
            if(next.second <= 0) continue;
            
            int next_cost = next.second;
//            cout << next_cost << " " << cost << "\n";
            
            if(min(next_cost, cost) > visited[next.first]){
                
                // 아니 처음 접근법이 갸 ㅇ맞았던건데 왜 bool로 바꿨을까 쉬봉방
                visited[next.first] = min(next_cost, cost);
                q.push({min(next_cost, cost), next.first});
                
            }
        }
        
    }
    
    cout << 1;
    

    
    
    return 0;
}

[BOJ] 중량제한
https://compy07.github.io/Blog/posts/boj/1939/
Author
뒹굴뒹굴 이정훈 공부방
Published at
2026-03-20