样例过了,全部WA,玄关求条
查看原帖
样例过了,全部WA,玄关求条
1105009
Yangxixuan楼主2025/7/27 09:44
#include <cstdio>
#include <iostream>
#include <vector>
#define MAXN 100005
using namespace std;
int N,Q;
int c[MAXN],fa[MAXN],d[MAXN];
int col[MAXN],ans[MAXN];
char ch[MAXN];
vector<int> e[MAXN];
int find(int x){
	if(x==fa[x]) return x;
	return fa[x]=find(fa[x]);
}
void dfs(int u,int f){
	if(col[u]) fa[u]=u;
	else fa[u]=f;
	d[u]=f;
	for(int i=0;i<e[u].size();i++){
		int v=e[u][i];
		if(v==f) continue;
		dfs(v,u);
	}
}
int main(){
	ios::sync_with_stdio(false);
	scanf("%d%d",&N,&Q);
	for(int i=1;i<N;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		e[u].push_back(v);
		e[v].push_back(u);
	}
	for(int i=1;i<=Q;i++){
		cin>>ch[i]>>c[i];
		if(ch[i]=='C') col[c[i]]++;
	}
	dfs(1,0);
	fa[1]=1;
	for(int i=Q;i>=1;i--){
		if(ch[i]=='C'){
			col[c[i]]--;
			if(!col[c[i]]) fa[c[i]]=d[c[i]];
		}
		else ans[i]=find(c[i]);
	}
	for(int i=1;i<=Q;i++) if(ch[i]=='Q') printf("%d\n",ans[i]);
	return 0;
}
//1<=n,q<=1e5
2025/7/27 09:44
加载中...