3 条题解
-
1
#include<bits/stdc++.h> using namespace std; void read(long long &h){ char o; long long x=0,y=1; o=getchar_unlocked(); while(!(o<='9'&&o>='0')){ if(o=='-'){ y=-1; } o=getchar_unlocked(); } while(o<='9'&&o>='0'){ x*=10; x+=o-'0'; o=getchar_unlocked(); } h=x*y; return ; } long long n,lc,rc,ans=1e15,now; long long num[10000],tree[110][110]; int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); read(n); memset(tree,0x3f,sizeof(tree)); for(int i=1;i<=n;i++){ tree[i][i]=0; read(num[i]); read(lc);read(rc); if(lc){ tree[i][lc]=tree[lc][i]=1; } if(rc){ tree[i][rc]=tree[rc][i]=1; } } for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ tree[i][j]=min(tree[i][j],tree[i][k]+tree[k][j]); } } } for(int i=1;i<=n;i++){ now=0; for(int j=1;j<=n;j++){ now+=tree[i][j]*num[j]; } ans=min(now,ans); } cout<<ans; return 0; } -
-1
#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; } -
-1
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
- 难度
- 5
- 标签
- 递交数
- 37
- 已通过
- 19
- 上传者