Cod sursa(job #1429011)

Utilizator patrutoiuandreipatrutoiu andrei patrutoiuandrei Data 5 mai 2015 15:13:23
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <set>
#include <vector>

#define dim 10001
#define ush unsigned short int
#define inf 60000
using namespace std;

ush i,n,k,sum,nrnod,nod,par,x,y;
ush cost[dim];
struct semn
{
    bool operator() (const int x, const int y) const
    {
        return cost[x] < cost[y];
    }
};
vector <ush> v[dim];
multiset <ush, semn> heap;
 FILE *fin =fopen("cezar.in","r"),*fout=fopen("cezar.out","w");
int main()
{

   // fin>>n>>k;
   fscanf(fin,"%hu %hu",&n,&k);
    for(i=1;i<n;i++)
    {
   //     fin>>x>>y;
   fscanf(fin,"%hu %hu",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
        cost[i]=1;
    }
    cost[n]=1;
    for(i=1;i<=n;i++)
    {
        if(v[i].size()==1)
        {
            heap.insert(i);
        }
    }
    nrnod=n;
    while(nrnod > k+1)
    {
        nod = *heap.begin();
        par = v[nod][0];
        cost[par] += cost[nod] ;
        sum+=cost[nod];
        nrnod--;
        for(i=0;;i++)
        {
            if(v[par][i]==nod)
            {
                v[par].erase(v[par].begin() + i);
                break;
            }
        }
        heap.erase(heap.begin());
        if(v[par].size()==1)
            heap.insert(par);
    }

    //fout<<sum;
    fprintf(fout,"%hu",sum);
    return 0;
}