Pagini recente »
Atașamentele paginii Clasament 2020-03-01-clasa-5-concurs
|
Istoria paginii utilizator/vicentiu
|
Istoria paginii utilizator/hogis23
|
Clasament 2016-10-05-test-7-8
|
Cod sursă (job #143336)
Cod sursă (job
#143336)
#include<fstream>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#include<time.h>
#include<set>
using namespace std;
#define MAXSIZE 100005
int sum[MAXSIZE], sw[MAXSIZE], value[MAXSIZE], n , m, total_sum;
int father[MAXSIZE];
vector<int> arb[MAXSIZE];
int sol_muchie ;
set<int > responses[100005];
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];
sol_muchie = 0;
for (vector<int> :: iterator it = arb[nod].begin(); it < arb[nod].end(); it++)
if (*it != father[nod]) {
maxim = max(maxim, sum[*it]);
if ( maxim == sum[*it])
sol_muchie = *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;
responses[nod].insert(sol_muchie);
} else {
f >> tip >> nod;
update(nod, tip);
}
}
int nr_app[5];
int up_muchii = 0;
memset(nr_app, 0, sizeof(nr_app));
for (int i= 1 ; i<= n; i++) {
if (responses[i].size() > 0 && *(responses[i].begin()) == 0)
up_muchii ++;
if (responses[i].size() < 4)
nr_app[responses[i].size()] ++;
else
nr_app[4]++;
}
cout << nr_app[0] << ' ' << nr_app[1]<< ' ' << nr_app[2] << ' '<< nr_app[3] << ' ' << nr_app[4]<<endl;
cout << up_muchii<< endl;
}
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;
}