#include<iostream> #include<cmath> #include<vector> using namespace std; void funkcja(vector<long long>D,vector<long long>M,int miasto,int prMiasto,int &maxMiasto,long long &amax,int d,long long odleglosc) { int i,j; for(i=0;i<d;i+=3) if(D[i]==miasto && D[i+1]!=prMiasto) { if(M[D[i+1]-1]-odleglosc-D[i+2]>=amax) { amax=M[D[i+1]-1]-odleglosc-D[i+2]; maxMiasto=D[i+1]; } funkcja(D,M,D[i+1],miasto,maxMiasto,amax,d,odleglosc+D[i+2]); } else if(D[i+1]==miasto && D[i]!=prMiasto) { if(M[D[i]-1]-odleglosc-D[i+2]>=amax) { amax=M[D[i]-1]-odleglosc-D[i+2]; maxMiasto=D[i]; } funkcja(D,M,D[i],miasto,maxMiasto,amax,d,odleglosc+D[i+2]); } } int main () { ios_base::sync_with_stdio(0); cin.tie(0); int n,q,i,j,k,d=-1,dsize,a,b,maxMiasto=0,miasto=1; long long c,amax; cin>>n>>q; int N=3*(n-1); vector<long long>M(n); vector<long long>D(N); for(i=0;i<n;i++) cin>>M[i]; for(i=0;i<N;i+=3) { cin>>a>>b>>c; D[i]=a; D[i+1]=b; D[i+2]=c; } for(i=0;i<q;i++) { cin>>a; if(a==1) { cin>>b>>c; M[b-1]=c; } else { cin>>a>>b>>c; for(j=0;j<N;j+=3) if((D[j]==a && D[j+1]==b) || (D[j]==b && D[j+1]==a)) { D[j+2]=c; break; } } amax=0; funkcja(D,M,miasto,-1,maxMiasto,amax,N,0); miasto=maxMiasto; cout<<miasto<<" "; } 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 | #include<iostream> #include<cmath> #include<vector> using namespace std; void funkcja(vector<long long>D,vector<long long>M,int miasto,int prMiasto,int &maxMiasto,long long &amax,int d,long long odleglosc) { int i,j; for(i=0;i<d;i+=3) if(D[i]==miasto && D[i+1]!=prMiasto) { if(M[D[i+1]-1]-odleglosc-D[i+2]>=amax) { amax=M[D[i+1]-1]-odleglosc-D[i+2]; maxMiasto=D[i+1]; } funkcja(D,M,D[i+1],miasto,maxMiasto,amax,d,odleglosc+D[i+2]); } else if(D[i+1]==miasto && D[i]!=prMiasto) { if(M[D[i]-1]-odleglosc-D[i+2]>=amax) { amax=M[D[i]-1]-odleglosc-D[i+2]; maxMiasto=D[i]; } funkcja(D,M,D[i],miasto,maxMiasto,amax,d,odleglosc+D[i+2]); } } int main () { ios_base::sync_with_stdio(0); cin.tie(0); int n,q,i,j,k,d=-1,dsize,a,b,maxMiasto=0,miasto=1; long long c,amax; cin>>n>>q; int N=3*(n-1); vector<long long>M(n); vector<long long>D(N); for(i=0;i<n;i++) cin>>M[i]; for(i=0;i<N;i+=3) { cin>>a>>b>>c; D[i]=a; D[i+1]=b; D[i+2]=c; } for(i=0;i<q;i++) { cin>>a; if(a==1) { cin>>b>>c; M[b-1]=c; } else { cin>>a>>b>>c; for(j=0;j<N;j+=3) if((D[j]==a && D[j+1]==b) || (D[j]==b && D[j+1]==a)) { D[j+2]=c; break; } } amax=0; funkcja(D,M,miasto,-1,maxMiasto,amax,N,0); miasto=maxMiasto; cout<<miasto<<" "; } return 0; } |