Cod sursa(job #2825410)

Utilizator Iulia_DianaIulia Diana Iulia_Diana Data 4 ianuarie 2022 17:51:14
Problema Salvare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("salvare.in");
ofstream fout("salvare.out");
vector <int> v[1005];
int sir[1005], n, k, w[1005], copie[1005];
void dfs(int nod, int l)
{
    for(int i=0; i<v[nod].size(); i++)
        if(w[v[nod][i]]==0)
        {
            w[v[nod][i]]=w[nod]+1;
            if(w[v[nod][i]]<=l)  dfs(v[nod][i], l);
        }

}
int verif(int l)
{
    int nr=0;
    for(int i=1; i<=n; i++)
        if(w[i]==0 && nr<=k)
        {
            w[i]=1;  nr++;
            dfs(i, l);
        }
    int ok=0;
    for(int i=1; i<=n; i++)
    {
        if(w[i]==0)  ok=1;
        copie[i]=w[i];
        w[i]=0;
    }
    return !ok;
}
int cond(int a, int b)
{
    return v[a].size()>v[b].size();
}
int main()
{
    fin >> n >> k;
    for(int i=1; i<n; i++)
    {
        int x, y;  fin >> x >> y;
        v[x].push_back(y);
        v[y].push_back(x);
        sir[i]=i;
    }
    sir[n]=n;
    sort(sir+1, sir+n+1, cond);
    int st=1, dr=n, ok;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(verif(mij))
        {
            ok=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    fout << ok << "\n";
    for(int i=1; i<=n; i++)
        if(copie[i]==1)   fout << i << " ";
    return 0;
}