Pagini recente » Cod sursa (job #2305018) | Cod sursa (job #110250) | Cod sursa (job #1407004) | Cod sursa (job #778804) | Cod sursa (job #1429011)
#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;
}