Cod sursa(job #2372938)

Utilizator mateibanuBanu Matei Costin mateibanu Data 7 martie 2019 11:34:23
Problema Curcubeu Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

#define NMAX 10010

int cnt[NMAX],t[NMAX],viz[NMAX],da[NMAX];
vector<int>v[NMAX];
priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > >h;

int main()
{
    int n,k,i,x,y,nr,r,o,total=0;
    freopen("cezar.in","r",stdin);
    freopen("cezar.out","w",stdout);
    scanf("%d%d",&n,&k);
    for (i=1;i<n;i++){
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
        cnt[x]++;
        cnt[y]++;
    }
    for (i=1;i<=n;i++){
        t[i]=cnt[i];
        if (cnt[i]==1) {h.push(make_pair(1,i));cnt[i]--;da[i]=1;}
    }
    r=n-k-1;
    while (!h.empty()&&r>0){
        x=h.top().second;
        nr=v[x].size();
        total+=da[x];
        for (i=0;i<nr;i++)
        if (cnt[v[x][i]]>0){
            cnt[v[x][i]]--;
            da[v[x][i]]+=da[x];
            if (cnt[v[x][i]]==1){
                cnt[v[x][i]]--;
                da[v[x][i]]++;
                h.push(make_pair(t[v[x][i]],v[x][i]));
            }
        }
        h.pop();
        r--;
    }
    printf("%d",total);
    return 0;
}