[BOJ/21924] ๋„์‹œ ๊ฑด์„ค, c++

2021. 6. 8. 16:40ยทDEV/PS

๐Ÿ”— ๋งํฌ

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

 

21924๋ฒˆ: ๋„์‹œ ๊ฑด์„ค

์ฒซ ๋ฒˆ์งธ ์ค„์— ๊ฑด๋ฌผ์˜ ๊ฐœ์ˆ˜ $N$ $(3 \le N \le 10^5 )$์™€ ๋„๋กœ์˜ ๊ฐœ์ˆ˜ $M$ $(2 \le M \le min( {N(N-1) \over 2}, 5×10^5)) $๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„ ๋ถ€ํ„ฐ $M + 1$์ค„๊นŒ์ง€ ๊ฑด๋ฌผ์˜ ๋ฒˆํ˜ธ $a$, $b$ $(1 \le a, b \le N, a ≠ b)$์™€ ๋‘

www.acmicpc.net

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

ํ•œ์ค„ ํ›„๊ธฐ : ์ด๋ฆ„ ๋ถ€ํ„ฐ mst ๋งˆ์Œ์ด ํŽธํ•ด์ง„๋‹ค.

๐Ÿคท ๋ฌธ์ œ

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

์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ(MST) ๋ฌธ์ œ์ด๋‹ค.

์ถ”๊ฐ€๋œ ๋ฌธ์ œ์— ๋– ์žˆ๊ธธ๋ž˜ ์ด๋ฆ„์ด ๋ญ”๊ฐ€ MST ๊ฐ™์•„์„œ ๋“ค์–ด๊ฐ€๋ดค๋”๋‹ˆ ์—ญ์‹œ MST ์˜€๋‹ค.

 

๊ฑด๋ฌผ์„ ๋ชจ๋‘ ์—ฐ๊ฒฐํ•˜๋Š” ๋„๋กœ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐ”๋กœ MST ๋ผ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

๋‹จ, ๋ชจ๋“  ๋„์‹œ๊ฐ€ ์—ฐ๊ฒฐ ๋˜์ง€ ์•Š์œผ๋ฉด -1์„ ์ถœ๋ ฅํ•ด์•ผํ•˜๋Š”๋ฐ, ์˜ˆ์ œ 3์—์„œ ์•Œ์ˆ˜ ์žˆ๋‹ค ์‹ถ์ด

๋ชจ๋“  ๋„์‹œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฑด ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ์š”์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ๋ณด๋‹ค ๋งŽ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋‹ค.

๋”ฐ๋ผ์„œ ๋จผ์ € ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด dfs ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜์˜€๋‹ค.

dfs ๋ฅผ 1๋ฒˆ ๊ฑด๋ฌผ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํƒ์ƒ‰ํ•œ ํ›„, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฑด๋ฌผ์ด ์žˆ๋‹ค๋ฉด ๋ชจ๋“  ๋„์‹œ๊ฐ€ ์—ฐ๊ฒฐ ๋  ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค.

 

dfs ํƒ์ƒ‰ ํ›„ ๋ชจ๋“  ๊ฑด๋ฌผ์ด ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, ๋ฐ”๋กœ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜์—ฌ MST๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

MST๋ฅผ ๊ตฌํ•œ ํ›„, ์ตœ์ข…์ ์œผ๋กœ ๋ชจ๋“  ๊ฐ„์„  Cost - MST Cost ๋ฅผ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์ฃผ์˜ ํ•  ์ ์€ Cost๊ฐ€ 10^6๊นŒ์ง€ ์ฃผ์–ด์ง€๋ฏ€๋กœ long long type์„ ์‚ฌ์šฉํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์ธ MST ๋ฌธ์ œ ๊ฐ™๋‹ค.

๐Ÿ’ป ์ฝ”๋“œ

//AC
//BOJ 21924 ๋„์‹œ ๊ฑด์„ค
#include <iostream>
#include <vector>
#include <algorithm>
#define SIZE 101010
using namespace std;
typedef long long ll;
int parent[SIZE];
bool visit[SIZE];
vector<int> graph[SIZE];
struct Edge{
    int from, to, cost;
    bool operator < (const Edge& other) const{
        return cost < other.cost;
    }
};
int Find(int x){
    if(parent[x] == x)  return x;
    return parent[x] = Find(parent[x]);
}
void Union(int x, int y){
    x = Find(x);
    y = Find(y);
    if(y < x)   parent[y] = parent[x];
    else    parent[x] = parent[y];
}
void dfs(int x){
    visit[x] = true;
    for(int i=0; i<graph[x].size(); i++){
        if(!visit[graph[x][i]]){
            dfs(graph[x][i]);
        }
    }
}
int main(){
    int N, M;
    int from, to, cost;
    ll costSum = 0, mstSum=0;
    cin >> N >> M;
    vector<Edge> node(M);
    for(int i=0; i<M; i++){
        cin >> node[i].from >> node[i].to >> node[i].cost;
        costSum += node[i].cost;
        graph[node[i].from].push_back(node[i].to);
        graph[node[i].to].push_back(node[i].from);
    }
    
    dfs(1);
    for(int i=1; i<=N; i++){
        parent[i] = i;
        if(!visit[i]){
            printf("-1");
            return 0;
        }
    }
    sort(node.begin(), node.end());
    for(int i=0; i<M; i++){
        if(Find(node[i].from) != Find(node[i].to)){
            mstSum += node[i].cost;
            Union(Find(node[i].from), Find(node[i].to));
        }
    }
    ll ans = costSum - mstSum;
    printf("%lld", ans);
    return 0;
}

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

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

[BOJ/16118] ๋‹ฌ๋น› ์—ฌ์šฐ, c++  (0) 2021.07.25
[BOJ/20136] ๋ฉ€ํ‹ฐํƒญ ์Šค์ผ€์ค„๋ง 2  (0) 2021.06.26
[BOJ/2023] ์‹ ๊ธฐํ•œ ์†Œ์ˆ˜, c++  (1) 2021.06.08
[BOJ/21921] ๋ธ”๋กœ๊ทธ , c++  (0) 2021.06.08
[BOJ/9202] Boggle, c++  (1) 2021.06.04
'DEV/PS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ/16118] ๋‹ฌ๋น› ์—ฌ์šฐ, c++
  • [BOJ/20136] ๋ฉ€ํ‹ฐํƒญ ์Šค์ผ€์ค„๋ง 2
  • [BOJ/2023] ์‹ ๊ธฐํ•œ ์†Œ์ˆ˜, c++
  • [BOJ/21921] ๋ธ”๋กœ๊ทธ , c++
jobchae
jobchae
๋งํ•˜๋Š” ๊ฐ์ž์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ๋„์ ์ด๋Š” Node.js ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.
  • jobchae
    JOBCHAE
    jobchae
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿš€ JOBCHAE (182)
      • DEV (151)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • ์žก๋‹คํ•œ ๊ฐœ๋ฐœ ์ผ์ง€ (21)
        • injection (1)
        • JS, TS (3)
        • DB (2)
      • ์ถ•๊ตฌ (0)
      • ์ผ์ƒ (19)
      • ์˜ํ™” (3)
      • ์Œ์•… (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

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

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
jobchae
[BOJ/21924] ๋„์‹œ ๊ฑด์„ค, c++
์ƒ๋‹จ์œผ๋กœ

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