#include <stdio.h>
#define MAX 101
#define INF (1 << 31 - 1)
int numOfCities;
int numOfPSs;//number of power stations
int PSArray[MAX];
int roubleArray[MAX][MAX];
int minRoubleArray[MAX];
int electrified[MAX];
int minCost;
int main(){
//freopen("input.txt", "r", stdin);
/* inpput */
scanf("%d %d", &numOfCities, &numOfPSs);
int indexOfPS;
for (indexOfPS = 1; indexOfPS <= numOfPSs; indexOfPS++){
scanf("%d", &PSArray[indexOfPS]);
}
int from;
int to;
for (from = 1; from <= numOfCities; from++){
for (to = 1; to <= numOfCities; to++){
scanf("%d", &roubleArray[from][to]);
}
}
/* minimum spanning tree Prim algorithm */
//reset minRoubleArray;
int indexOfCity;
for (indexOfCity = 1; indexOfCity <= numOfCities; indexOfCity++){
minRoubleArray[indexOfCity] = INF;
}
//initial minRoubleArray;
for (indexOfPS = 1; indexOfPS <= numOfPSs; indexOfPS++){
int PS = PSArray[indexOfPS];
electrified[PS] = 1;
for (indexOfCity = 1; indexOfCity <= numOfCities; indexOfCity++){
if (roubleArray[indexOfCity][PS] < minRoubleArray[indexOfCity]){
minRoubleArray[indexOfCity] = roubleArray[indexOfCity][PS];
}
}
}
int numOfCitiesElectrified;
for (numOfCitiesElectrified = numOfPSs + 1; numOfCitiesElectrified <= numOfCities; numOfCitiesElectrified++){
int minRouble = INF;//min rouble in minRoubleArray
int cityCostMinRouble = 0;
//to find min rouble in minRoubleArray
for (indexOfCity = 1; indexOfCity <= numOfCities; indexOfCity++){
if (electrified[indexOfCity] == 1){
continue;
}
if (minRoubleArray[indexOfCity] < minRouble){
minRouble = minRoubleArray[indexOfCity];
cityCostMinRouble = indexOfCity;
}
}
electrified[cityCostMinRouble] = 1;
//update minRoubleArray
for (indexOfCity = 1; indexOfCity <= numOfCities; indexOfCity++){
if (electrified[indexOfCity] == 1){
continue;
}
if (roubleArray[indexOfCity][cityCostMinRouble] < minRoubleArray[indexOfCity]){
minRoubleArray[indexOfCity] = roubleArray[indexOfCity][cityCostMinRouble];
}
}
}
/* output */
for (indexOfCity = 1; indexOfCity <= numOfCities; indexOfCity++){
minCost += minRoubleArray[indexOfCity];
}
printf("%d", minCost);
return 0;
}
URAL 1982 Electrification Plan
最新推荐文章于 2018-01-29 12:00:20 发布