2021.08.06 P2441 角色属性树(树形结构)
P2441 角色属性树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题意:
求离x最近的祖先y且(x,y)>1。
分析:
数据水,暴力能过。正解究竟是啥,很令人疑惑。
代码如下:
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=2e5+10;
int n,m,a[N],fa[N];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
int solve(int x){
for(int i=fa[x];i;i=fa[i])if(gcd(a[x],a[i])>1)return i;
return -1;
}
int main(){
n=read();m=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<n;i++){
int u,v;
u=read();v=read();
fa[v]=u;
}
for(int i=1;i<=m;i++){
int op=read();
if(op==1){
int u;
u=read();
cout<<solve(u)<<endl;
}else if(op==2){
int u,v;
u=read();v=read();
a[u]=v;
}
}
return 0;
}