#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
int n,q,wyn=1,akt=1,p,k;
long long int waga[100010],lol,kappa;
vector < pair <int,long long int> > graf[100010];
void dfs1(int jaki,int w,int pop,long long int odl){
if(w!=jaki){
if(waga[w]-odl>lol){
akt=w;
lol=waga[w]-odl;
}
if(waga[w]-odl==lol&&w<akt)
akt=w;
}
//cout<<odl<<" ";
for(int i=0;i<graf[w].size();i++){
if(graf[w][i].f!=pop){
dfs1(jaki,graf[w][i].f,w,odl+graf[w][i].s);
}
}
}
void dfs2(int jaki,int w, int pop, long long int odl){
if(w!=jaki){
if(waga[w]-odl>lol){
akt=w;
lol=waga[w]-odl;
}
if(waga[w]-odl==lol&&w<akt)
akt=w;
}
for(int i=0;i<graf[w].size();i++){
if((w==p&&graf[w][i].f==k)||(w==k&&graf[w][i].f==p)){
graf[w][i].s=kappa;
}
if(graf[w][i].f!=pop){
dfs2(jaki,graf[w][i].f,w,odl+graf[w][i].s);
}
}
}
int main(){
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++){
scanf("%lld",&waga[i]);
}
for(int i=1;i<n;i++){
int a,b;
long long int x;
scanf("%d%d%lld",&a,&b,&x);
graf[a].push_back(make_pair(b,x));
graf[b].push_back(make_pair(a,x));
}
for(int i=0;i<q;i++){
int type;
scanf("%d",&type);
if(type==1){
int a;
long long int x;
scanf("%d%lld",&a,&x);
waga[a]=x;
lol=-(100000000000002137LL);
//cout<<lol<<endl;
dfs1(akt,akt,-1,0);
printf("%d ",akt);
}
else {
scanf("%d%d%lld",&p,&k,&kappa);
lol=-(100000000000002137LL);
dfs2(akt,akt,-1,0);
printf("%d ",akt);
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <bits/stdc++.h> using namespace std; #define f first #define s second int n,q,wyn=1,akt=1,p,k; long long int waga[100010],lol,kappa; vector < pair <int,long long int> > graf[100010]; void dfs1(int jaki,int w,int pop,long long int odl){ if(w!=jaki){ if(waga[w]-odl>lol){ akt=w; lol=waga[w]-odl; } if(waga[w]-odl==lol&&w<akt) akt=w; } //cout<<odl<<" "; for(int i=0;i<graf[w].size();i++){ if(graf[w][i].f!=pop){ dfs1(jaki,graf[w][i].f,w,odl+graf[w][i].s); } } } void dfs2(int jaki,int w, int pop, long long int odl){ if(w!=jaki){ if(waga[w]-odl>lol){ akt=w; lol=waga[w]-odl; } if(waga[w]-odl==lol&&w<akt) akt=w; } for(int i=0;i<graf[w].size();i++){ if((w==p&&graf[w][i].f==k)||(w==k&&graf[w][i].f==p)){ graf[w][i].s=kappa; } if(graf[w][i].f!=pop){ dfs2(jaki,graf[w][i].f,w,odl+graf[w][i].s); } } } int main(){ scanf("%d%d",&n,&q); for(int i=1;i<=n;i++){ scanf("%lld",&waga[i]); } for(int i=1;i<n;i++){ int a,b; long long int x; scanf("%d%d%lld",&a,&b,&x); graf[a].push_back(make_pair(b,x)); graf[b].push_back(make_pair(a,x)); } for(int i=0;i<q;i++){ int type; scanf("%d",&type); if(type==1){ int a; long long int x; scanf("%d%lld",&a,&x); waga[a]=x; lol=-(100000000000002137LL); //cout<<lol<<endl; dfs1(akt,akt,-1,0); printf("%d ",akt); } else { scanf("%d%d%lld",&p,&k,&kappa); lol=-(100000000000002137LL); dfs2(akt,akt,-1,0); printf("%d ",akt); } } return 0; } |
English