求助
查看原帖
求助
316827
Temperature_automata楼主2020/9/22 13:09

求助!floyed炸了!

#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;


int tree[105];//树 


int n,ans=1000000;
int g[105][105];//两点距离计算 

int main()
{
	
	cin >> n;
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			g[i][j]=100000;
	
	int a,b;//左右孩子 
	
	for(int i = 1;i <= n; ++i)
	{
		g[i][i]=0;
		cin >> tree[i];//输入居民数 
		cin >> a >> b;
		
		if(a>0)g[i][a]=g[a][i]=1;
		if(b>0)g[i][b]=g[b][i]=1; 
	}
	
	//好了,现在每个节点的信息都好了
	//开始遍历距离(时间复杂度要炸的样纸)
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i!=j)
			{
				for(int k=1;i<=n;i++)
				{
					if(g[j][i]+g[i][k]<g[j][k])
						g[j][k]=g[j][i]+g[i][k];
				}
			}
		
	for(int i=1;i<=n;i++)
	{
		int k=0;
		for(int j=1;j<=n;j++)
		{
			k += g[i][j]*tree[j];
		}
		ans = min(ans, k);
	}
	cout<<ans;
	return 0;
}

2020/9/22 13:09
加载中...