//分别计算红色药剂和蓝色药剂的最小价格a[i]和blue[k],取最小价格相加 #include <stdio.h> int main() { int n, result = 0; scanf("%d", &n); int min[n], a[n], b[n], c[n], blue[n]; //min[n]是最小价格数组,a[n]是红色药剂的价格,blue[n]是蓝色药剂的价格 for(int i=0; i<n; i++){ scanf("%d", &a[i]);//输入n种红色药剂的价格 } for(int j=0; j<n; j++){ scanf("%d %d", &b[j], &c[j]);//输入红色药剂合成蓝色药剂编号 } for(int k=0; k<n; k++){ blue[k] = a[b[k]-1] + a[c[k]-1];//计算蓝色药剂的价格,注意下标 if(blue[k] < a[k]){//min[n]存最小价格 min[k] = blue[k]; } else{ min[k] = a[k]; } result += min[k];//计算最小花费 } printf("%d\n", result); return 0; }