40分求助
查看原帖
40分求助
53141
芝麻馅儿汤圆楼主2021/12/16 00:40
#include<cstdio>
#include<iostream>
#include<queue>

#define forn(i, a, b) for(int i = a; i <= b; i++)
int min(int a, int b) 
{
	return (a < b) ? (a) : (b);
}
using namespace std;

struct node
{
	int fa;
	int le, ri;
	int mem;
};

struct node2
{
	int mec;
	int dis;
};

bool vis[110][110];
node hi[110];
queue < node2 > que;
int l_ans;
int ans = 0x3f3f3f3f;
int n;

int bfs(int nk)
{
	l_ans = 0;
	while(!que.empty())
		que.pop();
	node2 io;
	vis[nk][nk] = 1;
	io.mec = nk;
	io.dis = 0;
	que.push(io);
	while(!que.empty())
	{
		node2 kc = que.front();
		que.pop();
		if(!vis[hi[kc.mec].le][nk])
		{
			node2 llo;
			llo.dis = kc.dis + 1;
			llo.mec = hi[kc.mec].le;
			vis[hi[kc.mec].le][nk] = 1;
			l_ans += llo.dis * hi[llo.mec].mem;
			que.push(llo);
		}
		if(!vis[hi[kc.mec].ri][nk])
		{
			node2 rro;
			rro.dis = kc.dis + 1;
			rro.mec = hi[kc.mec].ri;
			vis[hi[kc.mec].ri][nk] = 1;
			l_ans += rro.dis * hi[rro.mec].mem;
			que.push(rro);
		}
		if(!vis[hi[kc.mec].fa][nk])
		{
			node2 ffo;
			ffo.dis = kc.dis + 1;
			ffo.mec = hi[kc.mec].fa;
			vis[hi[kc.mec].fa][nk] = 1;
			l_ans += ffo.dis * hi[ffo.mec].mem;
			que.push(ffo);
		}		
	}
	return l_ans;
}


int main()
{
	cin >> n;
	forn(i, 1, n)
	{
		cin >> hi[i].mem >> hi[i].le >> hi[i].ri;
		hi[hi[i].le].fa = i;
		hi[hi[i].ri].fa = i;			
	}
	forn(i, 1, n)
	{
		//cout << i << " " <<  hi[i].fa << " " << hi[i].le << " " << hi[i].ri << " " << bfs(i) << endl;
		ans = min(ans, bfs(i));
	}
	cout << ans;
	
	return 0;
}

2021/12/16 00:40
加载中...