Pagini recente » Cod sursa (job #1389354) | Cod sursa (job #1385729) | Cod sursa (job #1345130) | Cod sursa (job #6599) | Cod sursa (job #1389555)
#include<fstream>
using namespace std;
ifstream f("heavypath.in");
ofstream g("heavypath.out");
int n,m,a[100001],b[100001],t,x,y;
int viz[100001];
int ask(int x,int y){
int xi=x,prec;
viz[x]=b[x];
prec=viz[x];
x=a[x];
while(x!=0){
viz[x]=max(prec,b[x]);
prec=viz[x];
if(x==y) { fill(viz+1,viz+n+1,-1);return prec;}
x=a[x];
}
viz[y]=b[y];
prec=viz[y];
y=a[y];
while(y!=0){
if(viz[y]!=-1) { prec=max(viz[y],prec); fill(viz+1,viz+n+1,-1); return prec;}
viz[y]=max(prec,b[y]);
prec=viz[y];
y=a[y];
}
}
int main(){
f>>n>>m;
for(int i=1;i<=n;i++){
f>>b[i];
viz[i]=-1;
}
for(int i=1;i<=n-1;i++)
{
f>>x>>y;
a[y]=x;
}
while(m--){
f>>t>>x>>y;
if(t==1) g<<ask(x,y)<<"\n";
else b[x]=y;
}
return 0;
}