#include<bits/stdc++.h> #define f first #define s second using namespace std; typedef pair<int,long long> par; long long tab[100009], col[100009], x, y, z; vector<par> graf[100009]; void DFS(int u, long long w) { col[u]=1; if(u!=z) { long long a=tab[u]-w; if(a>y || (a==y && x>u)) { x=u; y=a; } } for(int i=graf[u].size()-1; i>=0; i--) { par p=graf[u][i]; if(col[p.f]==0) DFS(p.f,w+p.s); } return; } int main() { int n,q; long long a,b,c,d=1; scanf("%d%d", &n, &q); for(int i=1; i<=n; i++) scanf("%lld", &tab[i]); for(int i=1; i<n; i++) { scanf("%lld%lld%lld", &a, &b, &c); graf[a].push_back(par(b,c)); graf[b].push_back(par(a,c)); } for(int i=1; i<=q; i++) { scanf("%lld", &a); if(a==1) { scanf("%lld%lld", &a, &b); tab[a]=b; } else { scanf("%lld%lld%lld", &a, &b, &c); graf[a].push_back(par(b,c)); graf[b].push_back(par(a,c)); } y=-1000000000000000009; x=100009; z=d; DFS(d,0); printf("%lld ", x); d=x; for(int i=1; i<=n; i++) col[i]=0; } 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 | #include<bits/stdc++.h> #define f first #define s second using namespace std; typedef pair<int,long long> par; long long tab[100009], col[100009], x, y, z; vector<par> graf[100009]; void DFS(int u, long long w) { col[u]=1; if(u!=z) { long long a=tab[u]-w; if(a>y || (a==y && x>u)) { x=u; y=a; } } for(int i=graf[u].size()-1; i>=0; i--) { par p=graf[u][i]; if(col[p.f]==0) DFS(p.f,w+p.s); } return; } int main() { int n,q; long long a,b,c,d=1; scanf("%d%d", &n, &q); for(int i=1; i<=n; i++) scanf("%lld", &tab[i]); for(int i=1; i<n; i++) { scanf("%lld%lld%lld", &a, &b, &c); graf[a].push_back(par(b,c)); graf[b].push_back(par(a,c)); } for(int i=1; i<=q; i++) { scanf("%lld", &a); if(a==1) { scanf("%lld%lld", &a, &b); tab[a]=b; } else { scanf("%lld%lld%lld", &a, &b, &c); graf[a].push_back(par(b,c)); graf[b].push_back(par(a,c)); } y=-1000000000000000009; x=100009; z=d; DFS(d,0); printf("%lld ", x); d=x; for(int i=1; i<=n; i++) col[i]=0; } return 0; } |