蒟蒻样例不过求助!!!
查看原帖
蒟蒻样例不过求助!!!
524906
刘辰雨楼主2022/1/22 14:01
#include<bits/stdc++.h>
using namespace std;
int n , w,l,r , minroad;
struct tree
{
	int value;
	int father;
	int lson;
	int rson;
	int deep;
	int size;
	int road;
}a[201];
void mem()
{
	for(int i = 1 ; i<= n ; i++)
	{
		a[i].father = 0;
		a[i].lson = 0;
		a[i].rson = 0;
		a[i].value = 0;
		a[i].size = 1;
		a[i].deep = 1;	
	}	
}
void addsize(int i,int v)
{
	a[i].size += v;
	if(a[i].father !=0)addsize(a[i].father, v);
}
void find(int i)
{
	if(a[i].lson == 0)return;
	else
	{
		int l = a[i].lson;
		a[l].road = a[i].road+a[1].size-a[l].size-a[l].size;
		if(minroad > a[l].road)minroad = a[l].road;
		find(l);
	}
	if(a[i].rson == 0)return;
	else
	{
		int r = a[i].rson;
		a[r].road = a[i].road+a[1].size-a[r].size-a[r].size;
		if(minroad > a[r].road)minroad = a[r].road;
		find(r);
	}
}

int main()
{
	cin>>n;
	mem();
	for(int i = 1 ; i<=n ; i++)
	{
		cin>>w>>l>>r;
		a[i].value = w;
		a[i].lson=l;
		a[i].rson=r;
		a[l].father=i;
		a[r].father=i;
		a[l].deep=a[i].deep+1;
		a[r].deep=a[i].deep+1;
		if(l!=0)addsize(i,a[l].value);
		if(r!=0)addsize(i,a[r].value); 
	}
	for(int i = 1 ; i<= n ; i++)a[1].road += a[i].value;
	minroad = a[1].road;
	find(1);
	cout<<minroad<<endl;
	return 0;
}

求树的重心,很标准,就是会算错,为什么呢(拒绝接受其他思路AC代码)

2022/1/22 14:01
加载中...