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


왜 자꾸 틀렸다고 나올까요 ㅠㅠ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
#include <iostream>
#include <algorithm>
#define SIZE 100010
using namespace std;
 
/* Struct */
typedef struct edge * ePtr;
typedef struct edge
{
    int N; /* 시작점 */
    int M; /* 도착점 */
    int W; /* 가중치 */
} Edge;
 
/* Edge */
Edge mEdge[SIZE];
 
/* Integer */
int MAX[SIZE];
 
/* Kruskal Algorithm */
int Kruskal(int N, int M)
{
    /* Integer */
    int mSum = 0/* 가중치의 합을 저장하는 변수 */
 
    /* 정점의 수 만큼 배열 초기화 */
    for (int ii = 1; ii <= N; ii++) { MAX[ii] = ii; }
    for (int jj = 0; jj < M; jj++)
    {
        if (MAX[mEdge[jj].N] != MAX[mEdge[jj].M])
        {
            MAX[mEdge[jj].N] < MAX[mEdge[jj].M] ? MAX[mEdge[jj].M] = MAX[mEdge[jj].N] : MAX[mEdge[jj].N] = MAX[mEdge[jj].M];
 
            /* 가중차 합 저장 */
            mSum += mEdge[jj].W;
        }
    }
 
    return mSum;
}
 
/* Compare */
int Compare(const void * v1, const void * v2)
return ((ePtr)v1)->> ((ePtr)v2)->W ? 1 : 0; }
 
int main(void)
{
    /* Integer */
    int num1 = 0, num2 = 0;
    cin >> num1 >> num2;
 
    /* Input */
    for (int count = 0; count < num2; count++)
    {
        cin >> mEdge[count].N >> mEdge[count].M >> mEdge[count].W;
    }
 
    /* Qsort */
    qsort((void *)mEdge, num2, sizeof(mEdge[0]), Compare);
 
    /* output */
    cout << Kruskal(num1, num2) << endl;
 
    return 0;
}
cs