Pagini recente » oni_2017_cl10_ziua2 | Cod sursa (job #1506483) | Cod sursa (job #2072816) | Cod sursa (job #2275596) | Cod sursa (job #1723170)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
#define NMAX 1000
vector<int> ad[NMAX + 1];
vector<int> distantaMax(NMAX + 1);
vector<int> indici(NMAX + 1);
vector<bool> vizitat(NMAX + 1);
int main()
{
ifstream fin("salvare.in");
ofstream fout("salvare.out");
int n, k;
fin >> n >> k;
for(int i = 1; i <= n - 1; ++i){
int x, y;
fin >> x >> y;
ad[x].push_back(y);
ad[y].push_back(x);
indici[i] = i;
}
indici[n] = n;
sort(indici.begin() + 1, indici.begin() + n + 1,
[](int a, int b)->bool{ return ad[a].size() < ad[b].size(); });
for(int i = 1; i <= n; ++i){
int nod = indici[i];
vizitat[nod] = true;
for(int vecin : ad[nod]){
if(!vizitat[vecin]){
if(distantaMax[nod] + 1 > distantaMax[vecin]){
distantaMax[vecin] = distantaMax[nod] + 1;
}
}
}
}
sort(indici.begin() + 1, indici.begin() + n + 1,
[](int a, int b)->bool{
if(distantaMax[a] == distantaMax[b])
return a < b;
return distantaMax[a] > distantaMax[b];
});
fout << distantaMax[indici[k + 1]] + 1 << "\n";
for(int i = 1; i <= k; ++i)
fout << indici[i] << " ";
return 0;
}