玄学出错
查看原帖
玄学出错
128870
chen_qian楼主2021/2/22 18:20
#include<bits/stdc++.h>
#define N 700005
using namespace std;
int n,m;
int head[N],idx,w[N];
int siz[N],son[N],dep[N],MAX_DEP;
int tot,root[N],cnt;
bool vis[N],ans[N];
map<string,int> ma;
set<int> t[N];
struct query{
	int k,id; 
};
struct edge{
	int v,next;
}e[N<<1];
vector<query> q[N];
void add(int u,int v){
	e[++idx].v=v;
	e[idx].next=head[u];
	head[u]=idx;
}
void dfs1(int x,int f){
	siz[x]=1;
	dep[x]=dep[f]+1;
	MAX_DEP=max(dep[x],MAX_DEP);
	for(int i=head[x];i;i=e[i].next){
		int y=e[i].v;
		if(y==f) continue;
		dfs1(y,x);
		siz[x]+=siz[y];
		if(siz[y]>siz[son[x]]) son[x]=y;
	}
}
void solve(int x,int f){
	t[dep[x]].insert(w[x]);
	for(int i=head[x];i;i=e[i].next){
		int y=e[i].v;
		if(vis[y]||y==f) continue;
		solve(y,x);
	}
}
void dfs2(int x,int f,int type){
	for(int i=head[x];i;i=e[i].next){
		int y=e[i].v;
		if(y==f||y==son[x]) continue;
		dfs2(y,x,1);
	}
	if(son[x]){
		dfs2(son[x],x,0);
		vis[son[x]]=1;
	}
	solve(x,f);
//	cout<<x<<": ";
//	for(int i=1;i<=MAX_DEP;i++){
//		cout<<i<<' '<<t[i].size()<<"; "; 
//	}
//	cout<<endl;
	for(int i=0;i<q[x].size();i++){
		int tmp=dep[x]+q[x][i].k;
		if(tmp>MAX_DEP) ans[q[x][i].id]=0;
		else{
			ans[q[x][i].id]=t[tmp].size();
			cout<<q[x][i].id<<' '<<tmp<<' '<<t[tmp].size()<<' '<<ans[q[x][i].id]<<endl;
		}
	}
	if(son[x]) vis[son[x]]=0;
	if(type)
		for(int i=1;i<=MAX_DEP;i++) t[i].clear();
}
int main(){
	scanf("%d",&n);
	string s;
	for(int i=1;i<=n;i++){
		int f;
		cin>>s;
		scanf("%d",&f);
		if(f)add(f,i),add(i,f);
		else root[++cnt]=i;
		if(!ma[s]) ma[s]=++tot;
		w[i]=ma[s]; 
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++){
		int u;
		query x;
		scanf("%d%d",&u,&x.k);
		x.id=i;
		q[u].push_back(x);
	}
	for(int i=1;i<=cnt;i++) dfs1(root[i],0);
	for(int i=1;i<=cnt;i++) dfs2(root[i],0,1);
	for(int i=1;i<=m;i++) printf("%d\n",ans[i]);
	return 0;
}

我在debug时输出

ans[q[x][i].id]=t[tmp].size();
cout<<q[x][i].id<<' '<<tmp<<' '<<t[tmp].size()<<' '<<ans[q[x][i].id]<<endl;

但是这几行的输出却是

就是t[tmp].size()与ans[q[x][i].id]不同

可是我刚刚才赋过值呀

2021/2/22 18:20
加载中...