Advertisement
Guest User

skola

a guest
Nov 26th, 2014
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1.     #include <stdio.h>
  2.     #include <algorithm>
  3.     #include <queue>
  4.     #include <vector>
  5.     #include <set>
  6.     using namespace std;
  7.     int i,j,n,m,k,a,b;
  8.      
  9.     struct skolas{
  10.     long long val;
  11.     set<int> adj;
  12.     }sk[100001];
  13.      
  14.      
  15.     struct node{
  16.     long long val;
  17.     int id;
  18.     node(long long _val,int _id){
  19.     val = _val;
  20.     id = _id;
  21.     }
  22.     };
  23.      
  24.     bool cmp(node a,node b){
  25.     if(a.val!=b.val) return a.val > b.val;
  26.     else return a.id < b.id;
  27.     }
  28.      
  29.     set<int> s;
  30.     set<int>::iterator it;
  31.     priority_queue<node,vector<node>,bool(*)(node,node)> pq(cmp);
  32.      
  33.      
  34.     int procceed(){
  35.     int ID;
  36.     long long VAL;
  37.     while(!pq.empty()){
  38.     //VAL = sk[ID].val;
  39.     ID = pq.top().id;
  40.     pq.pop();
  41.      
  42.     sk[*sk[ID].adj.begin()].val+=sk[ID].val;
  43.     sk[*sk[ID].adj.begin()].adj.erase(ID);
  44.      
  45.     if(sk[*sk[ID].adj.begin()].adj.size()==1){
  46.     pq.push(node(sk[*sk[ID].adj.begin()].val,*sk[ID].adj.begin()));
  47.     }
  48.     }
  49.      
  50.     return ID;
  51.     }
  52.      
  53.     int main()
  54.     {
  55.     freopen("skola.in","r",stdin);
  56.     freopen("skola.out","w",stdout);
  57.      
  58.     scanf("%d",&n);
  59.     for(i=1;i<=n;i++){
  60.     scanf("%d",&sk[i].val);
  61.     }
  62.     for(i=1;i<n;i++){
  63.     scanf("%d%d",&a,&b);
  64.     sk[a].adj.insert(b);
  65.     sk[b].adj.insert(a);
  66.      
  67.     if(sk[a].adj.size()==1) s.insert(a);
  68.     else s.erase(a);
  69.      
  70.     if(sk[b].adj.size()==1) s.insert(b);
  71.     else s.erase(b);
  72.     }
  73.      
  74.     for(it=s.begin();it!=s.end();it++){
  75.     pq.push(node(sk[*it].val,*it));
  76.     }
  77.      
  78.     printf("%d",procceed());
  79.      
  80.     return 0;
  81.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement