记录编号 | 416781 | 评测结果 | AAAAA | ||
---|---|---|---|---|---|
题目名称 | 医院设置 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.003 s | ||
提交时间 | 2017-06-22 18:42:13 | 内存使用 | 0.35 MiB | ||
#include<iostream> #include<cstdio> #include<cstdlib> #define leiyujie best using namespace std; const int maxn=99999999; int a[101]; int g[101][101]; int main() { int n,l,r,min,total; freopen("hospital.in","r",stdin); freopen("hospital.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=maxn; for(int i=1;i<=n;i++) { g[i][i]=0; cin>>a[i]>>l>>r; if(l>0)g[i][l]=g[l][i]=1; if(r>0) g[i][r]=g[r][i]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) if(i!=k) for(int j=1;j<=n;j++) if(i!=j&&k!=j&&g[i][k]+g[k][j]<g[i][j]) g[i][j]=g[i][k]+g[k][j]; min=0x7fffffff; for(int i=1;i<=n;i++) { total=0; for(int j=1;j<=n;j++) total+=g[i][j]*a[j]; if(total<min)min=total; } cout<<min<<endl; return 0; }