树状哈希52分,求调
查看原帖
树状哈希52分,求调
560335
JACK2021楼主2023/8/15 11:08
#include <bits/stdc++.h>
using namespace std;
#define p_qu priority_queue
#define p_qu_less priority_queue<int, vector<int>, greater<int> >
#define C_in(a,n) for(int i=0;i<n;i++) cin>>a[i]
#define C_out(a,n) for(int i=0;i<n;i++) cout<<a[i]<<" "
#define SUM(a,n,sum) sum[0]=a[0];for(int i=1;i<n;i++) sum[i]=sum[i-1]+a[i];
#define SUM2(a,n,m,sum) sum[0][0]=a[0][0]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) sum[i][j]=(i!=0?sum[i-1][j]:0)+(j!=0?sum[i][j-1]:0)+a[i][j]-(i!=0 && j!=0?sum[i-1][j-1]:0)
#define all(a) a.begin(),a.end()
#define l_b lower_bound
#define u_b upper_bound
#define pb push_back
#define max_3(a,b,c) max(max(a,b),c)
#define max_4(a,b,c,d) max(a,max_3(b,c,d))
#define min_3(a,b,c) min(min(a,b),c)
#define min_4(a,b,c,d) min(a,min_3(b,c,d))
#define zero(a) memset(a, 0, sizeof(a))
#define msit multiset<int>::iterator
#define setit set<int>::iterator
#define int long long
const int N=500005;
const int MAX=(1<<31)-1;
struct tree{
	int num;
	int l;
	int r;
	int point;
	int father;
}p[2222222];
int n;
int ha[2222222];
void _hash(int x)
{
	if(p[x].l==-1 && p[x].r==-1)
	{
		ha[x]=p[x].num*p[x].num;
		return;
	}
	int left=1;
	if(p[x].l!=-1)
	{
		_hash(p[x].l);
		left+=ha[p[x].l];
		ha[x]+=97*left;
	}
	int right=3;
	if(p[x].r!=-1)
	{
		_hash(p[x].r);
		right+=ha[p[x].r];
		ha[x]+=101*right;
	}
	ha[x]+=p[x].num*p[x].num;
	//cout<<x<<" "<<p[x].l<<" "<<p[x].r<<" "<<ha[x]<<endl;
	return;
}
signed main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>p[i].num;
		p[i].father=-1;
	}
	for(int i=1;i<=n;i++)
	{
		int x,y;
		cin>>x>>y;
		p[i].l=x;
		p[i].r=y;
		if(x!=-1) p[x].father=i;
		if(y!=-1) p[y].father=i;
		int pp=0;
		if(x!=-1) pp++;
		if(y!=-1) pp++;
		int j=i;
		while(j!=-1)
		{
			p[j].point+=pp;
			j=p[j].father;
		} 
	}
	_hash(1);
	int Max=0;
	for(int i=1;i<=n;i++)
	{
		if(p[i].l<0 || p[i].r<0) continue;
		if(ha[p[i].l]==ha[p[i].r])
		{
			Max=max(Max,p[i].point);
		}
	}
	cout<<(Max+1);
	return 0;
}

2023/8/15 11:08
加载中...