??为什么代码打不上去。再发一遍好了。
```cpp
#include<cstdio>
#include<queue>
#define N 0x7fffffff
using namespace std;
int n,p,c;
int num[805];//每个牧场中有多少奶牛
int map[805][805];
//SPFA
int dis[805];bool haven[805];
long long ans=N;
void init(int a){
for(int i=1;i<=p;i++){
haven[i]=0;
if(map[a][i]==N) dis[i]=N;
else dis[i]=map[a][i];
if(i==a){
dis[i]=0; haven[i]=1;
}
}
}
int main(){
scanf("%d%d%d",&n,&p,&c);
for(int i=1;i<=p;i++)
for(int j=1;j<=p;j++){
map[i][j]=N;
if(i==j) map[i][j]=0;
}
for(int i=1;i<=n;i++){
int x; scanf("%d",&x);
num[x]++;
}
for(int i=1;i<=c;i++){
int a,b,d; scanf("%d%d%d",&a,&b,&d);
map[a][b]=d; map[b][a]=d;
}
for(int i=1;i<=p;i++){
queue<int> q;
q.push(i);
init(i);
while(!q.empty()){
int t; t=q.front(); q.pop();
for(int k=1;k<=p;k++) if(dis[k]>dis[t]+map[t][k]){
dis[k]=dis[t]+map[t][k];
if(!haven[k]) q.push(k);
haven[k]=1;
}
haven[t]=0;
}
long long cnt=0;
for(int j=1;j<=p;j++)
cnt+=num[j]*dis[j];
ans=ans<cnt?ans:cnt;
}
if(ans==N) ans=0;
printf("%d",ans);
return 0;
}
```
by zdupttnk_s @ 2018-08-29 22:15:53
你。。distSPFA时初始化了吗
by C201914 @ 2018-08-29 22:28:34
哎呀不理我
by C201914 @ 2018-08-29 22:29:23
跑了
by C201914 @ 2018-08-29 22:29:29
memset(dis,0x3f,dis)【滑稽】
by nth_element @ 2018-08-29 22:31:09