傻子做法好心人进来康康orz
查看原帖
傻子做法好心人进来康康orz
225039
Future_Zero楼主2020/7/16 19:54

纯T做法

#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n;
long long aans,ans[N],num[N];
char s[N];
int cnt,first[N],to[N],next[N];
void add(int x,int y)
{
	next[++cnt]=first[x];
	first[x]=cnt;
	to[cnt]=y;
}
void dfs(int x,int fa)
{
	if(s[fa]=='(')
	{
		if(s[x]==')') 
		{
			ans[x]=ans[fa]+1;
			num[x]=num[fa]-1;
		}
		else 
		{
			ans[x]=ans[fa];
			num[x]=num[fa]+1;
		}
	}
	else
	{
		if(s[x]==')')
		{
			if(num[fa])
			{
				ans[x]=ans[fa]+1;
				num[x]=num[fa]-1;
			}
			else
			{
				ans[x]=ans[fa];
				num[x]=num[fa];
			}	
		}
		else	
		{
			num[x]=1;
			ans[x]=ans[fa];
		}
	}
	for(int e=first[x];e;e=next[e])
		dfs(to[e],x);
}
int main()
{
	scanf("%d%s",&n,s+1);
	for(int i=2;i<=n;++i)
	{
		int x;
		scanf("%d",&x);
		add(x,i);
	}
	dfs(1,0);
	for(int i=1;i<=n;++i)
		aans=(i*ans[i])^aans;
	cout<<aans;
}

硬是看不出哪里错了 过了1,2 wawawa

闲着没事康康错?就是不想写正解

2020/7/16 19:54
加载中...