본문 바로가기
백준

백준 13905 세부

by 콩순이냉장고 2023. 6. 15.

문제 URL : https://www.acmicpc.net/problem/13905

 

13905번: 세부

첫 번째 줄에는 섬에 존재하는 집의 수 N(2≤N≤100,000)와 다리의 수 M(1≤M≤300,000)이 주어진다. 두 번째 줄에는 숭이의 출발 위치(s)와 혜빈이의 위치(e)가 주어진다. (1≤s, e≤N, s≠e). 다음 M개의 줄

www.acmicpc.net

 

문제접근법 :  요약하자면 크루스칼 + bfs문제입니다. 

난이도는 높은편은 아니지만 해맸습니다. 질문에서 갈수없는 경우가 있다는것을 보고 문제에 적혀있질않아서

해맸습니다.

 

크루스칼 같은경우는 비용이 가장 큰것기준으로 정렬을해서 간선을 만들어나갑니다.

 

그간선대로 bfs를 적용해서 출발지점에서 끝지점까지 최소비용을 저장해서 답을 내주면 됩니다.

 

소스코드 :

#include <bits/stdc++.h>
using namespace std;
vector<pair<int,int>> v[100001];
int n,m;
int s,e;
vector<int>parent;
vector<tuple<int,int,int>> adj;
void input()
{
    cin>>n>>m;
    cin>>s>>e;
    int a,b,c;
    for(int i=0;i<m;i++){
        cin>>a>>b>>c;
        adj.push_back({-c,a,b});
    }
}
int find(int idx){
    if(parent[idx]==idx)return idx;
    return parent[idx]=find(parent[idx]);
}
bool merge(int a,int b){
    a = find(a);
    b = find(b);
    if(a==b)return false;
    if(a<b)parent[b]=a;
    else parent[a]=b;
    return true;
}
void solve()
{
    parent.resize(n+1);
    for(int i=1;i<=n;i++)parent[i]=i;
    sort(adj.begin(),adj.end());
    for(auto[c,a,b]:adj){
        if(merge(a,b)){
            v[a].push_back({b,-c});
            v[b].push_back({a,-c});
        }
    }
    
    vector<int> check(n+1),cost(n+1,1e8);
    queue<int> q;
    q.push(s);
    check[s]=1;
    while(!q.empty()){
        int cur=q.front();
        q.pop();
        for(int i=0;i<v[cur].size();i++){
            int next = v[cur][i].first;
            int ncost = v[cur][i].second;
            if(check[next]==0){
                cost[next]=min(cost[cur],ncost);
                check[next]=1;
                q.push(next);
            }
        }
    }
    cout<<(cost[e]==1e8?0:cost[e])<<"\n";
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    //freopen("input.txt", "r", stdin);
    input();
    solve();
}

 

궁금한점 혹은 모르는점 어떤 질문이든 댓글은 언제나 환영입니다.

'백준' 카테고리의 다른 글

백준 16638 괄호 추가하기 2  (1) 2023.10.15
백준 13544 수열과 쿼리 3  (1) 2023.10.15
백준 18405 경쟁적 전염  (0) 2023.06.14
백준 16404 주식회사 승범이네  (0) 2023.01.18
백준 2610 회의준비  (0) 2023.01.18