P1364医院设置
1 #include<iostream> 2 #include<cstdio> 3 #define inf 0x3f3f3f3f 4 using namespace std; 5 int map[105][105],a[105]; 6 int main(){ 7 int n; 8 scanf("%d",&n); 9 int x,y; 10 for(int i=1;i<=n;i++){ 11 for(int j=1;j<=n;j++){ 12 if(i==j) 13 map[i][j]=0; 14 else 15 map[i][j]=inf; 16 } 17 } 18 for(int i=1;i<=n;i++){ 19 scanf("%d%d%d",&a[i],&x,&y); 20 map[i][x]=1; 21 map[x][i]=1; 22 map[i][y]=1; 23 map[y][i]=1; 24 } 25 for(int k=1;k<=n;k++){ 26 for(int i=1;i<=n;i++){ 27 for(int j=1;j<=n;j++){ 28 if(map[i][k]+map[k][j]<map[i][j]) 29 map[i][j]=map[i][k]+map[k][j]; 30 } 31 } 32 } 33 int mina=inf; 34 for(int i=1;i<=n;i++){ 35 int total=0; 36 for(int j=1;j<=n;j++){ 37 total+=map[i][j]*a[j]; 38 } 39 if(total<mina) 40 mina=total; 41 } 42 cout<<mina; 43 return 0; 44 }
这题数据量较小,用弗洛伊德就可以,用邻接矩阵存图,弗洛伊德计算出多源最短路径,然后枚举每一个点作为医院的时候的距离和,找到最小的,(简直就是纯暴力)