求助
查看原帖
求助
941575
Stars_visitor_tyw楼主2024/10/13 16:53
#include<bits/stdc++.h>
#define int long long
using namespace std;
#define N 100005
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
void write(int x){
	if(x<0){x=-x;putchar(45);}
	if(x>9) write(x/10);
	putchar(x%10+48);
	return;
}
int n, q, fa[N], dp[N][35], dep[N], root, mp[N], ans[N];
long long lst;
//long long ans;
vector<int> nbr[N];
unordered_map<string,int> mp2[100005];
unordered_map<int,string> mp1;
struct node
{
	int x, y;
};
vector<node> qq[N];
int work(int x, int y)
{
	for(int j=0;j<20;j++)
	{
		if(y>>j&1)
		{
			x=dp[x][j];
		}
	}
	return x;
}
void pre_lca(int cur)
{
	dep[cur]=dep[fa[cur]]+1;
	mp[dep[cur]]++;
	for(auto ii:qq[cur])
	{
		ans[ii.y]-=mp[dep[cur]+ii.x];
	}
	for(int nxt:nbr[cur])
	{	
		if(nxt!=fa[cur])
		{
			pre_lca(nxt);
		}
	}
	for(auto ii:qq[cur])
	{
		ans[ii.y]+=mp[dep[cur]+ii.x]-1;
	}
	return ;
}
struct nnde
{
	int x, y;
}qqq[N];
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		string str;
		cin>>str;
		mp1[i]=str;
		cin>>fa[i];
		nbr[fa[i]].push_back(i);
//		nbr[i].push_back(fa[i]);
		dp[i][0]=fa[i];
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<20;j++)
		{
			dp[i][j]=dp[dp[i][j-1]][j-1];
		}
	}
	cin>>q;
	for(int qd=1;qd<=q;qd++)
	{
		int x,y;
		cin>>x>>y;
		int now=x;
		qq[now].emplace_back((node){y,qd});
		qqq[qd].x=x,qqq[qd].y=y;
	}
	for(int i=1;i<=n;i++)
	{
		if(!fa[i])
		{
			pre_lca(i);
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(dep[j]==i)
			{
				mp2[i][mp1[j]]++;
			}
		}
	}
	for(int qd=1;qd<=q;qd++)
	{
		int cnt=0;
		for(auto i:mp2[dep[qqq[qd].x]+qqq[qd].y])
		{
			cnt++;
		}
		cout<<cnt<<"\n";
	}
}
2024/10/13 16:53
加载中...