#include<iostream>
#include<vector>
#include<utility>
using namespace std;
int n, m ,a , b, co, gdzie, zamien_a, zamien_b;
long long w[100000], najwiecej, ile, o_ile, na_co;
long long maks, wartosc;
int obecny = 1, wypisz;
int odw[100000];
vector<pair<int, long long> > c[100000];
void DFS( int v, int k )
{
odw[v]++;
if(v!= obecny){
ile = w[v]-maks;
if(ile > najwiecej || (ile == najwiecej && v < wypisz))
{
najwiecej = ile;
wypisz = v;
}
//cout << v << " " << ile << " " << w[v] << " " << maks << "\n";
}
for(int i = 0; i<c[v].size(); i++)
{
if( (v==zamien_a && c[v].at(i).first == zamien_b ) || (v == zamien_b && c[v].at(i).first == zamien_a) )
{
c[v].at(i).second = na_co;
}
if(odw[c[v].at(i).first] != k )
{
maks+=c[v].at(i).second;
DFS(c[v].at(i).first, k);
maks-=c[v].at(i).second;
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin >> n >> m;
for(int i = 1; i<=n; i++)
{
cin >> w[i];
}
for(int i = 1; i<n; i++)
{
cin >> a >> b >> wartosc;
c[a].push_back(make_pair(b, wartosc) );
c[b].push_back(make_pair(a, wartosc) );
}
for(int i = 1; i<=n; i++)
{
ile = -2000000000000000;
najwiecej = -2000000000000000;
cin >> co;
if(co == 1)
{
cin >> gdzie >> o_ile;
w[gdzie] = o_ile;
}
else
{
cin >> zamien_a >> zamien_b >> na_co;
}
DFS(obecny, i);
cout << wypisz << " ";
obecny = wypisz;
}
}
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 | #include<iostream> #include<vector> #include<utility> using namespace std; int n, m ,a , b, co, gdzie, zamien_a, zamien_b; long long w[100000], najwiecej, ile, o_ile, na_co; long long maks, wartosc; int obecny = 1, wypisz; int odw[100000]; vector<pair<int, long long> > c[100000]; void DFS( int v, int k ) { odw[v]++; if(v!= obecny){ ile = w[v]-maks; if(ile > najwiecej || (ile == najwiecej && v < wypisz)) { najwiecej = ile; wypisz = v; } //cout << v << " " << ile << " " << w[v] << " " << maks << "\n"; } for(int i = 0; i<c[v].size(); i++) { if( (v==zamien_a && c[v].at(i).first == zamien_b ) || (v == zamien_b && c[v].at(i).first == zamien_a) ) { c[v].at(i).second = na_co; } if(odw[c[v].at(i).first] != k ) { maks+=c[v].at(i).second; DFS(c[v].at(i).first, k); maks-=c[v].at(i).second; } } } int main() { ios_base::sync_with_stdio(0); cin >> n >> m; for(int i = 1; i<=n; i++) { cin >> w[i]; } for(int i = 1; i<n; i++) { cin >> a >> b >> wartosc; c[a].push_back(make_pair(b, wartosc) ); c[b].push_back(make_pair(a, wartosc) ); } for(int i = 1; i<=n; i++) { ile = -2000000000000000; najwiecej = -2000000000000000; cin >> co; if(co == 1) { cin >> gdzie >> o_ile; w[gdzie] = o_ile; } else { cin >> zamien_a >> zamien_b >> na_co; } DFS(obecny, i); cout << wypisz << " "; obecny = wypisz; } } |
English