记录编号 | 416825 | 评测结果 | AAAAA | ||
---|---|---|---|---|---|
题目名称 | 医院设置 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.000 s | ||
提交时间 | 2017-06-22 19:42:22 | 内存使用 | 0.00 MiB | ||
#include<cstdio> #include<cctype> #include<iostream> using namespace std; const int maxn=103; const int inf=0xfffffff; int n,l,r,ans=inf,cnt; int w[maxn],g[maxn][maxn]; inline void in(int &x){ x=0;int f=1;char t=getchar(); while(!isdigit(t)){if(t=='-')f=-1;t=getchar();} while(isdigit(t)){x=x*10+t-48;t=getchar();} x*=f; } inline void floyd(){ for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ if(i==j) g[i][j]=0; g[i][j]=min(g[i][j],g[i][k]+g[k][j]); } } inline void work(){ in(n); for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) g[i][j]=inf; for(int i=1;i<=n;i++){ in(w[i]);in(l);in(r); g[i][l]=g[i][r]=g[l][i]=g[r][i]=1; } floyd(); for(int i=1;i<=n;i++){ cnt=0; for(int j=1;j<=n;j++){ cnt+=g[i][j]*w[j]; } ans=min(ans,cnt); } printf("%d",ans); } inline int mian(){ freopen("hospital.in","r",stdin); freopen("hospital.out","w",stdout); work(); return 0; } int miku=mian(); int main(){;}