-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata 19.cpp
More file actions
51 lines (50 loc) · 989 Bytes
/
data 19.cpp
File metadata and controls
51 lines (50 loc) · 989 Bytes
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
#include <stdio.h>
#include <limits.h>
int main(void) {
int n;
int wpl = 0;
scanf("%d", &n);
getchar();
int w[2 * 1000 + 1] = { 0 }, p[2 * 1000 + 1] = { 0 }, lch[2 * 1000 + 1] = { 0 }, rch[2 * 1000 + 1] = { 0 }, path[2 * 1000 + 1] = { 0 }; //nÊÓÓжàÉÙÔªËØ¶ø¶¨
for (int i = 0; i < n; i++) {
scanf("%d", &w[i]);
getchar();
}
int min1, min2;
for (int i = 0; i < n - 1; i++) {
min1 = INT_MAX;
min2 = INT_MAX;
int tmp1, tmp2;
for (int k = 0; k < n + i; k++) {
if (p[k] == 0) {
if (w[k] < min1) {
min1 = w[k];
tmp1 = k;
}
}
}
p[tmp1] = n + i;
for (int k = 0; k < n + i; k++) {
if (p[k] == 0) {
if (w[k] < min2) {
min2 = w[k];
tmp2 = k;
}
}
}
p[tmp2] = n + i;
w[n + i] = w[tmp1] + w[tmp2];
}
for (int i = 0; i < n; i++) {
int temp = i;
while (1) {
temp = p[temp];
path[i]++;
if (temp == 0) break;
}
}
for (int i = 0; i < n; i++) {
wpl += w[i] * (path[i] - 1);
}
printf("WPL=%d\n", wpl);
}