#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; } |
English