[BOJ/16118] ๋‹ฌ๋น› ์—ฌ์šฐ, c++

2021. 7. 25. 19:47ยทDEV/PS

๐Ÿ”— ๋งํฌ

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

 

16118๋ฒˆ: ๋‹ฌ๋น› ์—ฌ์šฐ

์ฒซ ์ค„์— ๋‚˜๋ฌด ๊ทธ๋ฃจํ„ฐ๊ธฐ์˜ ๊ฐœ์ˆ˜์™€ ์˜ค์†”๊ธธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ •์ˆ˜ N, M(2 ≤ N ≤ 4,000, 1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ์ค„์— ์„ธ ๊ฐœ์˜ ์ •์ˆ˜ a, b, d(1 ≤ a, b ≤ N, a ≠ b

www.acmicpc.net

https://github.com/jokj624/PS/blob/master/10000-15000/16118.cpp

 

GitHub - jokj624/PS: BOJ, CodeForces ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ์†Œ์Šค์ฝ”๋“œ

BOJ, CodeForces ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ์†Œ์Šค์ฝ”๋“œ. Contribute to jokj624/PS development by creating an account on GitHub.

github.com

๐Ÿคฏ ํ•œ์ค„ ํ›„๊ธฐ

๋Š‘๋Œ€๊ฐ€ ์—ฌ์šฐ๋ณด๋‹ค ์•ฝํ•˜๋‹ค๋‹ˆ

๐Ÿคท ๋ฌธ์ œ

๐Ÿ‘ฉ‍๐Ÿ’ป ํ’€์ด

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋‹ค.

๋Š‘๋Œ€๋Š” ์—ฌ์šฐ๋ณด๋‹ค 2๋ฐฐ ๋น ๋ฅด๊ฒŒ ๊ฐ€๊ฑฐ๋‚˜ 2๋ฐฐ ๋А๋ฆฌ๊ฒŒ ๊ฐ€๋Š”๊ฑธ ๋ฐ˜๋ณตํ•œ๋‹ค. ์—ฌ์šฐ๋Š” ์ผ์ •ํ•œ ์†๋„๋กœ ๊ฑท๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— cost ์ž์ฒด๋ฅผ 2๋ฐฐํ•˜์—ฌ ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋Š‘๋Œ€๋Š” /2 ํ˜น์€ *2 ๋กœ cost๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค.

๊ตณ์ด 2๋ฐฐ๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” /2์—์„œ ์‹ค์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ์–ด ์ •ํ™•ํ•˜์ง€ ์•Š์Œ! ๋ฏธ๋ฆฌ 2๋ฐฐ๋ฅผ ํ•˜๋Š”๊ฒŒ ํŽธํ•˜๋‹ค. 

๋จผ์ € ์—ฌ์šฐ๋Š” ์†๋„๊ฐ€ ์ผ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ํ•œ๋ฒˆ ๋Œ๋ ค์„œ ๊ฐ ๊ทธ๋ฃจํ„ฐ๊ธฐ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

 

๋Š‘๋Œ€๋ฅผ ๊ณ„์‚ฐํ•ด์•ผํ•˜๋Š”๋ฐ ๊ธฐ์กด์˜ ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ๊ณ„์‚ฐํ•˜๋˜ 2๊ฐœ๋ฅผ ๋ชจ๋‘ ๊ณ„์‚ฐํ•ด์ค˜์•ผํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์˜๋ฏธํ•˜๋Š” 2๊ฐœ๋Š” ๋Š‘๋Œ€๊ฐ€ ํ•ด๋‹น ๊ทธ๋ฃจํ„ฐ๊ธฐ๊นŒ์ง€ 2๋ฐฐ์˜ ์†๋ ฅ์œผ๋กœ ๊ฐ”์„ ๋•Œ, ์ ˆ๋ฐ˜์˜ ์†๋ ฅ์œผ๋กœ ๊ฐ”์„๋•Œ์ด๋‹ค.

2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ , 0/1 ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค. priority_queue ์•ˆ์— ํ˜„์žฌ ๊ทธ๋ฃจํ„ฐ๊ธฐ์—์„œ  ๋‹ค์Œ ๊ทธ๋ฃจํ„ฐ๊ธฐ๊นŒ์ง€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ , ๋‹ค์Œ ๊ทธ๋ฃจํ„ฐ๊ธฐ ๋ฒˆํ˜ธ, ์†๋ ฅ์— ๋”ฐ๋ผ 0์ธ์ง€ 1์ธ์ง€๋ฅผ ์ €์žฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

๋Š‘๋Œ€๋Š” ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์†๋ ฅ์ด ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— q์˜ front์˜ 0/1 ๋ณ€์ˆ˜๊ฐ’์— ๋”ฐ๋ผ ๋‹ค์Œ ๊ทธ๋ฃจํ„ฐ๊ธฐ๊นŒ์ง€๋Š” !๋ณ€์ˆ˜ ๋กœ ๋ฐ”๊ฟ”์„œ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

 

์ตœ์ข…์ ์œผ๋กœ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋‹ต์€ ์—ฌ์šฐ๊ฐ€ ๋Š‘๋Œ€๋ณด๋‹ค ๋จผ์ € ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃจํ„ฐ๊ธฐ ๊ฐœ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰์—

min(wolf[๊ทธ๋ฃจํ„ฐ๊ธฐ๋ฒˆํ˜ธ][0], wolf[๊ทธ๋ฃจํ„ฐ๊ธฐ๋ฒˆํ˜ธ][1]) ๊ณผ ๊ธฐ์กด์— ๊ตฌํ•ด๋‘” ์—ฌ์šฐ์˜ ํ•ด๋‹น ๊ทธ๋ฃจํ„ฐ๊ธฐ d[๊ทธ๋ฃจํ„ฐ๊ธฐ๋ฒˆํ˜ธ]๊นŒ์ง€ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์—ฌ์šฐ๊ฐ€ ๋” ์ž‘์œผ๋ฉด ์นด์šดํŒ… ํ•ด์ค€๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

//AC
//BOJ 16118 ๋‹ฌ๋น› ์—ฌ์šฐ 
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define INF 2e9+1
typedef long long ll;
typedef pair<ll, ll> edge;
vector<edge> graph[4001];
int main() {
    int n, m;
    cin >> n >> m;
    ll d[n + 1];
    ll wolf[n + 1][2];
    bool c[n + 1];
    for (int i = 0; i < m; i++){
        int from, to, cost;
        cin >> from >> to >> cost;
        graph[from].push_back({to, cost*2});
        graph[to].push_back({from, cost*2});
    }
    for (int i = 1; i <= n; i++){
        d[i] = INF;
        wolf[i][0] = INF;    wolf[i][1] = INF;
        c[i] = false;
    }
    priority_queue<edge, vector<edge>, greater<edge>> pq;
    pq.push({0, 1});
    d[1]=0;
    while (!pq.empty()) {  // ์—ฌ์šฐ
        ll x = pq.top().second;
        pq.pop();
        if (!c[x]){
            c[x] = true;
            for (int j = 0; j < graph[x].size(); j++){
                int y = graph[x][j].first;
                if (d[y] > d[x] + graph[x][j].second) {
                    d[y] = d[x] + graph[x][j].second;
                    pq.push({d[y], y});
                }
            }
        }
    }
    priority_queue<pair<ll, pair<ll, ll>>> pq2;
    pq2.push({0, {1, 0}});  // ๋Š‘๋Œ€ 
    wolf[1][0] = 0;
    while (!pq2.empty()) {
        ll cc = -pq2.top().first;
        ll x = pq2.top().second.first;
        ll z = pq2.top().second.second;
        pq2.pop();
        if(wolf[x][z] < cc) continue;
        for (int j = 0; j < graph[x].size(); j++) {
            int y = graph[x][j].first;
            ll nextCost = 0;
            if(z)   nextCost = graph[x][j].second * 2;
            else    nextCost = graph[x][j].second / 2;
            if (wolf[y][!z] > cc + nextCost) {
                wolf[y][!z] = cc + nextCost;
                pq2.push({-wolf[y][!z], {y, !z}});
            }
        }
    }
    ll ans = 0;
    for(int i=1; i<=n; i++){
        if(d[i] < min(wolf[i][0], wolf[i][1]) && d[i] != INF){
            ans += 1;
        }
    }
    printf("%lld", ans);
    return 0;
}
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'DEV > PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ/13904] ๊ณผ์ œ, c++  (0) 2021.08.10
[BOJ/22352] ํ•ญ์ฒด์ธ์‹, c++  (0) 2021.08.05
[BOJ/20136] ๋ฉ€ํ‹ฐํƒญ ์Šค์ผ€์ค„๋ง 2  (0) 2021.06.26
[BOJ/21924] ๋„์‹œ ๊ฑด์„ค, c++  (0) 2021.06.08
[BOJ/2023] ์‹ ๊ธฐํ•œ ์†Œ์ˆ˜, c++  (1) 2021.06.08
'DEV/PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ/13904] ๊ณผ์ œ, c++
  • [BOJ/22352] ํ•ญ์ฒด์ธ์‹, c++
  • [BOJ/20136] ๋ฉ€ํ‹ฐํƒญ ์Šค์ผ€์ค„๋ง 2
  • [BOJ/21924] ๋„์‹œ ๊ฑด์„ค, c++
jobchae
jobchae
๋งํ•˜๋Š” ๊ฐ์ž์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ๋„์ ์ด๋Š” Node.js ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.
  • jobchae
    JOBCHAE
    jobchae
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿš€ JOBCHAE (177)
      • DEV (146)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • ์žก๋‹คํ•œ ๊ฐœ๋ฐœ ์ผ์ง€ (20)
        • injection (1)
        • CI CD (0)
        • JS, TS (1)
      • ์ถ•๊ตฌ (0)
      • ์ผ์ƒ (19)
      • ์˜ํ™” (3)
      • ์Œ์•… (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๐Ÿ’ป Github
    • ๐Ÿ™‹๐Ÿป Linkedin
    • ๐Ÿ“– ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • PS Github
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ผ์ƒ
    ๋ฆฌ์•กํŠธ
    slack
    ์Šฌ๋ž™๋ด‡
    boj
    typescript
    ๋ฐฑ์ค€
    PS
    ์†ํŠธ
    ์ด๋ถ„ํƒ์ƒ‰
    ์Šฌ๋ž™
    ํšŒ๊ณ 
    Express
    ์•ฑ์žผ
    ์œ„์ƒ์ •๋ ฌ
    mongoDB
    SOPT
    BFS
    DP
    react
    Nest
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    aws
    nodejs
    node.js
    ์šฐ์„ ์ˆœ์œ„ํ
    ๋ ›์ธ ๋ฝํŽ˜์Šคํ‹ฐ๋ฒŒ
    DFS
    GitHub
    Nest.js
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
jobchae
[BOJ/16118] ๋‹ฌ๋น› ์—ฌ์šฐ, c++
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”