Untitled
unknown
plain_text
a year ago
1.5 kB
4
Indexable
#include<bits/stdc++.h>
using namespace std;
struct node{
int left;
int right;
int weight;
};
vector<node>v;
vector<int>freight;
void weight_search(int index){
if(v[index].left == 0 && v[index].right == 0){
return;
}
weight_search(v[index].left);
weight_search(v[index].right);
if(v[index].left != 0){
v[index].weight += v[v[index].left].weight;
}
if(v[index].right != 0){
v[index].weight += v[v[index].right].weight;
}
}
int assign(int temp_weight , int index){
v[index].weight += temp_weight;
if(v[index].left == 0 && v[index].right == 0){
return index;
}
if(v[v[index].left].weight <= v[v[index].right].weight){
return assign(temp_weight , v[index].left);
}
else{
return assign(temp_weight , v[index].right);
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n , m;
cin>>n>>m;
v.clear();
freight.clear();
freight.resize(m+5);
v.resize(2*n+5);
for(int i = n ; i< 2*n ; i++){
cin>>v[i].weight;
v[i].left = 0;
v[i].right = 0;
}
for(int i = 0 ; i<m ; i++){
cin>>freight[i];
}
for(int i = 1 ; i<n ; i++){
int trash;
cin>>trash>>v[i].left>>v[i].right;
v[i].weight = 0;
}
weight_search(1);
for(int i = 0 ; i<m ; i++){
cout<<assign(freight[i] , 1)<<' ';
}
}Editor is loading...
Leave a Comment