Pagini recente »
Borderou de evaluare (job #804912)
|
2020-12-10-clasa-5-tema-12
|
2020-01-16-clasa-7-tema-16
|
Clasament s15_8_tema15
|
Cod sursă (job #143335)
Cod sursă (job
#143335)
#include<fstream>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<time.h>
using namespace std;
#define MAXSIZE 200005
int sum[MAXSIZE], sw[MAXSIZE], value[MAXSIZE], n , m, total_sum;
int father[MAXSIZE];
vector<int> arb[MAXSIZE];
ifstream f("rafaela.in");
ofstream g("rafaela.out");
void update (int nod, int val) {
total_sum += val;
for (;nod; sum[nod] += val, nod = father[nod]);
}
int get_sol(int nod ) {
int maxim = total_sum - sum[nod];
for (vector<int> :: iterator it = arb[nod].begin(); it < arb[nod].end(); it++)
if (*it != father[nod])
maxim = max(maxim, sum[*it]);
return maxim;
}
void solve_queryes() {
char op;
int tip, nod;
total_sum = sum[1];
for(;m;m--) {
f >> op;
if ( op == 'Q') {
f >> nod;
g << get_sol(nod) << endl;
} else {
f >> tip >> nod;
update(nod, tip);
}
}
}
void initial_df(int nod){
sw[nod] = 1;
sum[nod] = value[nod];
for (vector<int> :: iterator it = arb[nod].begin(); it<arb[nod].end(); it++)
if (sw[*it] == 0) {
father[*it] = nod;
initial_df(*it);
sum[nod] += sum[*it];
}
}
void init_father(){
father[1] =0;
memset(sw, 0, sizeof(sw));
initial_df(1);
}
void citire(){
int i, j;
f >> n >> m;
for (int i = 1; i < n ; i++) {
int x, y;
f >> x >> y;
arb[x].push_back(y);
arb[y].push_back(x);
}
for (int i = 1 ; i<= n ; i++) {
f>>value[i];
}
}
int main(){
citire();
init_father();
solve_queryes();
f.close();
g.close();
return 0;
}