80分,dfs+bfs
查看原帖
80分,dfs+bfs
550752
Alfred_zhc楼主2021/10/11 21:35
#include <iostream>
using namespace std;
#define MAX(a, b) a>b?a:b;

int n, tree[1000002][3], maxn=1;
int que[10000002];

int bfs(int pos)
{
	int tail=1, t=1, top=1, root=1;
	bool u;
	que[1]=pos;
	for(;;)
	{
		u=0;
		for(int i=tail;i<=top;i++)
		{
			if(que[i]!=-1) que[++t]=tree[que[i]][1]; if(que[t]!=-1) root++;
			if(que[i]!=-1) que[++t]=tree[que[i]][2]; if(que[t]!=-1) root++;
		}
		tail=top+1;
		top=t;
		for(int i=(tail+t)/2+1;i<=t;i++)
		{
			if(tree[que[i]][0]!=tree[que[tail+t-i]][0])
			{
				return 0;
			}
			else if(que[i]!=-1) u=1;
		}
		if(not u) return root;
	}
}

void dfs(int pos)
{
	if(pos==-1) return;
	int b=bfs(pos);
	maxn=MAX(b, maxn);
	dfs(tree[pos][1]);
	dfs(tree[pos][2]);
}

int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>tree[i][0];
	int a, b;
	for(int i=1;i<=n;i++)
	{
		cin>>a>>b;
		tree[i][1]=a;
		tree[i][2]=b;
	}
	dfs(1);
	cout<<maxn;
	return 0;
}

80分dfs+bfs求助

2021/10/11 21:35
加载中...