În Roma antică există n așezări senatoriale distincte, câte una pentru fiecare dintre cei n senatori ai Republicii. Așezările senatoriale sunt numerotate de la 1 la n, între oricare două așezări existând legături directe sau indirecte. O legătură este directă dacă ea nu mai trece prin alte așezări senatoriale intermediare. Edilii au pavat unele dintre legăturile directe dintre două așezări (numind o astfel de legătură pavată stradă), astfel încât între oricare două așezări senatoriale să existe o singură succesiune de străzi prin care se poate ajunge de la o așezare senatorială la cealaltă.
Toţi senatorii trebuie să participe la şedinţele Senatului. In acest scop, ei se deplasează cu lectica. Orice senator care se deplasează pe o stradă plăteşte 1 ban pentru că a fost transportat cu lectica pe acea stradă.
Exemplu
cezar1.in
13 3 1 2 2 3 2 8 7 8 7 5 5 4 5 6 8 9 8 10 10 11 10 12 10 13
cezar1.out
11
Explicație
Costul minim se obţine, de exemplu, pentru alegerea celor 3 străzi între aşezările 5-7, 7-8, 8-10 și a sălii de şedințe a Senatului în aşezarea 8 (după cum este evidenţiat în desen). Există şi alte alegeri pentru care se obţine soluţia 11.

#include <bits/stdc++.h>
using namespace std;
ifstream cin("cezar1.in");
ofstream cout("cezar1.out");
int n , m , x , y , D[10001] , C[10001] , k , mini , c;
vector <int> G[10001];
int main()
{
cin >> n >> k;
m = n - 1;
for(int i = 1 ; i <= m ; i++)
{
cin >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
D[x]++;
D[y]++;
C[i] = 1;
}
C[n] = 1;
while(m > k)
{
mini = 10001;
for(int i = 1 ; i <= n ; i++)
if(D[i] == 1 && C[i] < mini) mini = C[i];
for(int i = 1 ; i <= n && m > k; i++)
if(D[i] == 1 && C[i] == mini)
{
D[i]--;
c += C[i];
for(auto p : G[i])
C[p] += C[i] , D[p]--;
m--;
//cout << i << endl;
}
}
cout << c;
}