人活著系列之芳姐和芳姐的豬 2929
阿新 • • 發佈:2018-12-02
人活著系列之芳姐和芳姐的豬
Problem Description
百年來,人活著是為了什麼這個問題一直縈繞在人的腦海裡,也一直困擾著人的思想。人活著就是活著了,為活著本身而活著,而不是為活著之外的任何事物而活著的。正因為活著,所以活著。對,是有點莫明其妙,但也是一句最受用的話。
芳姐特別喜歡豬,所以,她特意養了n頭豬,建了m個豬圈,順便在m個豬圈間修了k條無向邊,每條邊有都有起點u,終點v,距離w。每頭豬呆在一個特定的豬圈,有一個問題一直困擾著芳姐,那就是餵豬…芳姐和豬們約定好,每天去一個固定豬圈去吃飯,芳姐為了不累著她可愛的豬們,想知道所有的豬吃飯走的最短路程是多少?
Input
第一行: 三個數,豬的個數n(1<=n<=350),豬圈個數m(2<=m<=600),豬圈間道路數k(1<=k<=1200).(豬的編號為1…N, 豬圈的編號為1…m)
第二行到第N+1行: 1到N頭豬所在的豬圈號.
第n+2行到第n+k+1行: 每行有三個數:相連的豬圈u、v,兩豬圈間距離(1<=w<=255)
注:有的豬圈可能是空的,也可能有多頭豬,保證m個豬圈連通。
Output
Sample Input
3 4 5
2
3
4
1 2 1
1 3 5
2 3 7
2 4 3
3 4 5
Sample Output
8
#include <stdio.h>
#include <stdlib.h>
#define INF 0x3f3f3f3f;
int a[666][666],b[355];
int main()
{
int n,m,i,j,k,u,v,w,h;
scanf("%d%d%d",&n,&m,&k);
for(i=1;i<=n;i++)
scanf("%d",&b[i]);
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++ )
{
if(i==j) a[i][j]=0;
else a[i][j]=INF;
}
}
for(i=1;i<=k;i++)
{
scanf("%d%d%d",&u,&v,&w);
if(a[u][v]>w)
a[u][v]=a[v][u]=w;
}
for(h=1;h<=m;h++)
{
for(i=1;i<=m;i++)
{
for (j=1;j<=m;j++)
{
if(a[i][j]>a[i][h]+a[h][j])
a[i][j]=a[i][h]+a[h][j];
}
}
}
int s,min=INF;
for(i=1;i<=m;i++)
{
s=0;
for(j=1;j<=n;j++)
{
s=s+a[b[j]][i];
}
if(s<min) min=s;
}
printf("%d\n",min);
return 0;
}