1 条题解
-
0
C++ :
#include<stdio.h> #include<string.h> #define INF 1000 int min(int x,int y) { return x<y?x:y; } int m[1000],map[900][900],d[900][900]; int main() { int n,x,c,i,j,k,p,q,r; scanf("%d%d%d",&n,&x,&c); memset(m,0,sizeof(m)); for (i=0;i<n;i++) { scanf("%d",&k); m[k]++; } for (i=1;i<=x;i++) { for (j=1;j<=x;j++) { map[i][j]=INF; } } for (i=0;i<c;i++) { scanf("%d%d%d",&p,&q,&r); map[p][q]=map[q][p]=r; } for (i=1;i<=x;i++) { for (j=1;j<=x;j++) { if (i!=j) d[i][j]=map[i][j]; } } for (k=1;k<=x;k++) { for (i=1;i<=x;i++) { for (j=1;j<=x;j++) { if (d[i][k]!=INF&&d[k][j]!=INF&&d[i][k]+d[k][j]<d[i][j]) { d[i][j]=d[i][k]+d[k][j]; } } } } int ans=INF; for (i=1;i<=x;i++) { int z=0; for (j=1;j<=x;j++) { if (m[j]) { z+=d[i][j]*m[j]; } } ans=min(ans,z); } printf("%d",ans); return 0; }Pascal :
var h,t,x1,x2,d,ans,i,j,k,c,m,n,p,pp:longint; v:array[0..800] of boolean; a,dist,q,ex:array[0..800] of longint; map:array[0..800,0..800] of longint; procedure spfa(p:longint); var x,sum:longint; begin fillchar(dist,sizeof(dist),$7F); fillchar(v,sizeof(v),false); fillchar(q,sizeof(q),0); sum:=0; h:=0; t:=0; inc(t); dist[p]:=0; q[t]:=p; v[p]:=true; while h<>t do begin h:=(h mod n)+1; x:=q[h]; for i:=1 to pp do begin if (dist[x]+map[x,i]<dist[i]) and (map[x,i]<>0) then begin dist[i]:=dist[x]+map[x,i]; if not v[i] then begin t:=(t mod n)+1; q[t]:=i; v[i]:=true; end; end; v[x]:=false; end; end; for i:=1 to pp do sum:=sum+dist[i]*ex[i]; if sum<ans then ans:=sum; end; begin assign(input,'butter.in'); reset(input); read(n,pp,c); for i:=1 to n do begin read(a[i]); inc(ex[a[i]]); end; for i:=1 to c do begin read(x1,x2,d); map[x1,x2]:=d; map[x2,x1]:=d; end; ans:=maxlongint; spfa(4); for i:=1 to pp do spfa(i); writeln(ans); end.
- 1
信息
- ID
- 4481
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者