Cod sursa(job #1723170)

Utilizator preda.andreiPreda Andrei preda.andrei Data 29 iunie 2016 21:51:15
Problema Salvare Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#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;
}