80超时,bfs,求调
  • 板块P1364 医院设置
  • 楼主Z_X_T
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/11/5 21:58
  • 上次更新2023/10/27 04:08:18
查看原帖
80超时,bfs,求调
329937
Z_X_T楼主2022/11/5 21:58
#include<bits/stdc++.h>
using namespace std;
int n,boot,b[101];	
struct node{
	int l,r,sum;
}a[101];
int bfs(int r,int w)
{
    int c[101]={0};
    queue<int> q;
	q.push(r);
	c[r]=0;
	while(!q.empty())
	{
		for(int i=1;i<=n;i++)
		{
			int g=q.front();
			if(a[i].r==g||a[i].l==g)
			{
				q.push(i);
				c[i]=c[g]+1;
				if(i==w) return c[i];
			}
			if(a[g].l!=0||a[g].r!=0)
			{
				if(a[g].l!=0) q.push(a[g].l),c[a[g].l]=c[g]+1;
				if(a[g].r!=0) q.push(a[g].r),c[a[g].r]=c[g]+1;
				if(a[g].l==w) return c[a[g].l];
				if(a[g].r==w) return c[a[g].r];
			}
		}
		q.pop();
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) 
	{
		cin>>a[i].sum>>a[i].l>>a[i].r;
	}
//	cout<<bfs(4,1);
	long long ans=INT_MAX;
	for(int i=1;i<=n;i++) 
	{
		long long k=0;
		for(int j=1;j<=n;j++)
		{
			if(i!=j) k+=bfs(j,i)*a[j].sum;
		}
		ans=min(ans,k);
	}
	cout<<ans;
}
2022/11/5 21:58
加载中...