2 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=110; int w[N],g[N][N],n; int main() { cin>>n; memset(g,0x3f,sizeof(g)); for(int i=1;i<=n;i++) { int l,r; cin>>w[i]>>l>>r; if(l) g[l][i]=g[i][l]=1; if(r) g[r][i]=g[i][r]=1; } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=min(g[i][j],g[k][i]+g[j][k]); int ans=INT_MAX; for(int i=1;i<=n;i++) { int sum=0; for(int j=1;j<=n;j++) if(i!=j) sum+=w[j]*g[i][j]; ans=min(ans,sum); } cout<<ans; return 0; }
-
0
floyd
#include<bits/stdc++.h> using namespace std; int len[1000][1000]; int num[100000]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) len[i][j]=1e9; int l,r; for(int i=1;i<=n;i++){ len[i][i]=0; cin>>num[i]>>l>>r; if(l>0) len[i][l]=len[l][i]=1; if(r>0) len[i][r]=len[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&&len[i][k]+len[k][j]<len[i][j]) len[i][j]=len[i][k]+len[k][j]; } int Min=INT_MAX; for(int i=1;i<=n;i++){ int s=0; for(int j=1;j<=n;j++) s+=len[i][j]*num[j]; if(s<Min) Min=s; } cout<<Min; return 0; }
- 1
信息
- ID
- 5422
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 21
- 已通过
- 10
- 上传者