Cod sursa(job #1389555)

Utilizator tdr_drtTdr Drt tdr_drt Data 16 martie 2015 13:18:08
Problema Heavy Path Decomposition Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#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;
}