建议降橙
查看原帖
建议降橙
1046995
hjbaoyx楼主2024/8/22 15:45

使用Floyed+暴力就能过

代码只有27行:

#include<bits/stdc++.h>
using namespace std;
int p[110],g[110][110];
int main() {
	int n,lc,rc,sum,minn=INT_MAX;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			if(i==j) g[i][j]=0;
				else g[i][j]=1000;
	for(int i=1;i<=n;++i) {
		scanf("%d",p+i);
		scanf("%d%d",&lc,&rc);
		if(lc!=0) g[i][lc]=g[lc][i]=1;
		if(rc!=0) g[i][rc]=g[rc][i]=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[i][k]+g[k][j]);
	for(int i=1;i<=n;++i) {
		sum=0;
		for(int j=1;j<=n;++j) sum+=p[j]*g[i][j];
		minn=min(minn,sum);
	}
	printf("%d",minn);
	return 0;
}
2024/8/22 15:45
加载中...