inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

78. 원더랜드 : Kruskal MST(최소스패닝트리) 알고리즘 : Union&Find 활용

크루스칼 알고리즘 관련하여

321

mino

작성한 질문수 8

0

아래가 수업도중에 배운 알고리즘인데요!

------------------------------------------

int main(void)

{

    int v, e, city_a, city_b, cost, i, res, cnt;

    vector<Edge> Ed;

    res = cnt = 0;

    cin >> v >> e;

    for (i = 1; i <= e; i++) {

        unf[i] = i;

    }

    for (i = 0; i < e; i++)

    {

        cin >> city_a >> city_b >> cost;

        Ed.push_back(Edge(city_a, city_b, cost));

    }

    sort(Ed.begin(), Ed.end());

    for (i = 0; i < m; i++)

    {

        int fa = Find(Ed[i].v1);

        int fb = Find(Ed[i].v2);

        if (fa != fb) {

            res += Ed[i].cost;

            Union(Ed[i].v1, Ed[i].v2);

        }

    }

    cout << res << endl;

    return 0;

}

------------------------------------------

이 중에서 간선을 선택하는 

    for (i = 0; i < m; i++)

    {

        int fa = Find(Ed[i].v1);

        int fb = Find(Ed[i].v2);

        if (fa != fb) {

            res += Ed[i].cost;

            Union(Ed[i].v1, Ed[i].v2);

        }

    }

이 부분에 대해 궁금증이 있습니다!

크루스칼은 n개의 정점이 주어지면 n-1 개의 간선을 최소 가중치를 기준으로 선택하는 것으로 알고 있습니다.

그런데 문제에선 n-1개라는 기준을 사용하지 않았는데 그 이유가 있을까요? 선생님의 문제풀이에서 cnt 변수를 만드셨으나 사용하지 않으셨는데, 이를 체크하려다 체크하지 않으신 것 같습니다. 그 이유는 무엇인지 궁금합니다.

코테 준비 같이 해요! C++

답변 1

0

김태원

안녕하세요^^

N개의 정점으로 구성된 그래프에서 회로를 피하면서 N-1개의 간선을 선택하면 N개의 정점이 모두 연결된 트리가 됩니다. 즉 N개의 정점이 모두 한 집합이 되었다는 얘기입니다. 그러므로 N-1개의 간선이 선택된 이후부터는 for문이 계속 돌아도 if (fa != fb)  조건이 참이 되지 않아 더이상 간선이 선택되는 일은 없습니다.

테스트 케이스 질문

0

389

1

병합정렬 시간복잡도 질문

0

475

1

41.연속된 자연수의 합 문제풀이에서 수학적인 원리를 모르고 있습니다.

0

1365

2

질문드립니다.

0

392

1

질문드립니다!

0

437

1

dev 프로그램 질문

0

276

1

문제가 이해가 안되요

0

380

1

4번 나이차이 문제 접근법 질문 드립니다.

0

309

1

source file not compiled

0

1066

3

59번 질문드립니다.

0

376

1

25번 문제 질문

0

351

1

4. 나이차이 문제 질문입니다.

0

377

1

90번 라이언 킹 심바 1번 테스트 케이스

0

473

1

71번 문제 전역 변수 질문 있습니다

0

366

1

75번, 79번 priority_queue관련

1

361

1

75.최대 수입 스케줄

0

404

2

복면산 정답의 수

0

437

1

테스트 케이스에 대해서

0

450

1

수업 내용 질문입니다!

1

236

1

풀어보면 좋은 문제 목록 - 2580 스토쿠 DFS 질문입니다!!

0

841

2

12. 플로이드-와샬(그래프 최단거리) . 27:25초

0

257

1

다른 풀이 방식

0

319

1

크루스칼 vs 프림

0

314

1

숫자 총개수 small 질문있습니다.

0

246

1