求助卡常
  • 板块学术版
  • 楼主Moeebius
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/10/9 21:11
  • 上次更新2023/10/27 08:03:08
查看原帖
求助卡常
356003
Moeebius楼主2022/10/9 21:11

RT,T238762 调了好久了,fread等等都试过了,一个点就是死活卡不过去 qwq

记录

#include<bits/stdc++.h>
using namespace std;

#define il inline
#define mkp make_pair
#define pii pair<int,int>
#define fi first
#define se second
#define lll __int128
#define ll long long
#define For(i,j,k) for(int i=(j); i<=(k); ++i)
#define ForDown(i,j,k) for(int i=(j); i>=(k); --i)
#define pb push_back
#define FileIO(filename) freopen(filename ".in" ,"r",stdin);freopen(filename ".out" ,"w",stdout)
#define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;
template<typename T> 
il void read(T &x){ x=0;int f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}x*=f;}
template<typename T, typename ... Args>
il void read(T &x, Args &... y){ read(x);read(y...); }

int n,q;
const int MAXN=2e6+5;
vector<int> T[MAXN];
vector<pii> qry[MAXN];
int ans[MAXN],dep[MAXN],st[MAXN],top=0;

int dfs1(int x, int pre)
{
	dep[x]=dep[pre]+1;
	int res=x;
	for(int v: T[x])
	{
		if(v==pre) continue;
		int tmp=dfs1(v,x);
		if(dep[tmp]>dep[res]) res=tmp;
	}
	// cerr<<x<<' '<<res<<endl;
	return res;
}
void dfs2(int x, int pre)
{
	st[++top]=x;
	for(pii qr: qry[x])
	{
		if(top>qr.fi) ans[qr.se]=st[top-qr.fi];
	}
	for(int v: T[x]) if(v!=pre) dfs2(v,x);
	st[top--]=0;
}

signed main()
{
	read(n,q);
	For(i,1,n-1)
	{
		int u,v; read(u,v);
		T[u].pb(v); T[v].pb(u);
	}
	For(cnt,1,q)
	{
		int x,k; read(x,k);
		qry[x].pb(mkp(k,cnt));
	}

	// memset(dep,0,sizeof(dep));
	int u=dfs1(1,1); // cerr<<endl; For(i,1,n) cerr<<dep[i]<<endl;
	memset(dep,0,sizeof(dep));
	int v=dfs1(u,u);
	// cerr<<u<<' '<<v<<endl;
	// memset(ans,-1,sizeof(ans));
	top=0,dfs2(u,u); top=0,dfs2(v,v);
	For(i,1,q) printf("%d\n",ans[i]==0?-1:ans[i]);
	return 0;
}
2022/10/9 21:11
加载中...