1 条题解
-
0
C++ :
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<iomanip> #define MAX 1000000 using namespace std; int n,x,y,tot=0,ans=0x7fffffff; int p[101]; int g[101][101]={0}; void in(); void out(); void flod(); void find(); int main() { //freopen("3.in","r",stdin); in(); flod(); find(); out(); return 0; } // void in() { cin>>n; n++; for (int i=1;i<n;i++) { g[i][i]=0; for (int j=1;j<n;j++) { if (i==j) { continue; } if (g[i][j]) { continue; } g[i][j]=MAX; } cin>>p[i]>>x>>y; if (x>0) { g[i][x]=g[x][i]=1; } if (y>0) { g[i][y]=g[y][i]=1; } } } // void flod() { for (int i=1;i<n;i++) { for (int j=1;j<n;j++) { if (j==i)// || g[i][j]==MAX { continue; } for (int k=1;k<n;k++) { /*if (g[k][j]==MAX) { continue; }*/ if ((k!=j) && (k!=i) && (g[i][j]+g[j][k]<g[i][k])) { g[i][k]=g[i][j]+g[j][k]; } } } } } // void find() { for (int i=1;i<n;i++) { tot=0; for (int j=1;j<n;j++) { if (g[i][j]==MAX) { continue; } tot+=g[i][j]*p[j]; } if (tot<ans) { ans=tot; } } } // void out() { cout<<ans<<endl; }
Pascal :
program hospital; const maxn=101; max=1000000; var n,l1,l2,w,sum,min,i,j,k:longint; a,father:array[1..maxn] of longint; dis:array[1..maxn,1..maxn] of longint; procedure floyed; var h1,h2,h3:integer; begin readln(n); for i:=1 to n do for j:=1 to n do dis[i,j]:=max; for i:=1 to n do begin dis[i,i]:=0; readln(a[i],l1,l2); if l1>0 then begin dis[i,l1]:=1;dis[l1,i]:=1 end; if l2>0 then begin dis[i,l2]:=1;dis[l2,i]:=1 end; end; for h1:=1 to n do for h2:=1 to n do if h2<>h1 then for h3:=1 to n do if (h2<>h3) and (h1<>h3) and(dis[h2,h3]>dis[h2,h1]+dis[h1,h3]) then begin dis[h2,h3]:=dis[h2,h1]+dis[h1,h3]; dis[h3,h2]:=dis[h2,h3]; end; end; begin floyed; sum:=0;min:=maxlongint; for i:=1 to n do begin sum:=0; for j:=1 to n do inc(sum,a[j]*dis[i,j]); if sum<min then min:=sum; end; writeln(min); end.
- 1
信息
- ID
- 939
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者