社区讨论
求助SP11985
学术版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m3y9r4ae
- 此快照首次捕获于
- 2024/11/26 17:43 去年
- 此快照最后确认于
- 2025/11/04 13:53 4 个月前
CPP
#include<algorithm>
#include<iostream>
#include<string.h>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
#define lb(a,b,n) (lower_bound((a)+1,(a)+(n)+1,(b))-(a))
#define repu(i,u) for(int i=(h[u]);i;i=(ne[i]))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define pb(a) push_back((a))
#define inf 0x3f3f3f3f
#define llinf 1e18
#define debug cout<<"wwwwww"<<endl
#define xx return
const int N=1e5+10;
int n,m;
int c[N],wt[N];
int h[N],e[N*2],ne[N*2],idx;
vector<int>val[N];
namespace xx_CTT{
int d[N],son[N],sizt[N],fa[N];
int id[N],top[N],cnt;
void dfs1(int u,int fath){
fa[u]=fath;d[u]=d[fath]+1;sizt[u]=1;
int max_son=-1;
repu(i,u){
int v=e[i];
if(v==fath)continue;
dfs1(v,u);
sizt[u]+=sizt[v];
if(sizt[v]>max_son)son[u]=v,max_son=sizt[v];
}
}
void dfs2(int u,int topf){
id[u]=++cnt;wt[cnt]=u;top[u]=topf;
if(!son[u])xx;
dfs2(son[u],topf);
repu(i,u){
int v=e[i];
if(v==fa[u]||v==son[u])continue;
dfs2(v,v);
}
}
int ask(int u,int v,int k){
while(top[u]!=top[v]){
if(d[top[u]]<d[top[v]])swap(u,v);
vector<int>::iterator it=lower_bound(val[k].begin(),val[k].end(),id[top[u]]);
if(it!=val[k].end()&&*it<=id[u]){xx 1;}
u=fa[top[u]];
}
if(d[u]>d[v])swap(u,v);
vector<int>::iterator it=lower_bound(val[k].begin(),val[k].end(),id[u]);
if(it!=val[k].end()&&*it<=id[v]){xx 1;}
xx 0;
}
}
namespace Main_xx{
void add(int a,int b){e[++idx]=b,ne[idx]=h[a],h[a]=idx;}
void Main(){
while(scanf("%d%d",&n,&m)!=EOF){
memset(h,0,sizeof h);
idx=0;
rep(i,1,n){
xx_CTT::son[i]=0;
xx_CTT::id[i]=0;
wt[i]=0;
}
rep(i,1,n){cin>>c[i];c[i]++;}
rep(i,1,n-1){int u,v;cin>>u>>v;add(u,v);add(v,u);}
xx_CTT::dfs1(1,0);
xx_CTT::dfs2(1,1);
rep(i,1,xx_CTT::cnt){
val[c[wt[i]]].pb(i);
}
while(m--){
int u,v,c;
cin>>u>>v>>c;
c++;
if(xx_CTT::ask(u,v,c))cout<<"Find"<<endl;
else cout<<"NotFind"<<endl;
}
rep(i,1,xx_CTT::cnt){
val[c[wt[i]]].clear();
}
}xx;
}
}
signed main(){
// ios::sync_with_stdio(0);
// cin.tie(0);cout.tie(0);
Main_xx::Main();
xx 0;
}
想知道这段代码哪里T了, 应该T不了啊
回复
共 0 条回复,欢迎继续交流。
正在加载回复...