Cod sursa(job #2099542)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 4 ianuarie 2018 14:58:11
Problema Salvare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<bits/stdc++.h>
using namespace std;
struct sol{
    int MIN,nr,ind;
}v[1001];
int N,K,x,y,d[1001];
vector <int> G[1001];
queue <int> coada;
bool cmp(sol X,sol Y){
    return ((X.MIN<Y.MIN)||(X.MIN==Y.MIN&&X.nr>Y.nr));
}
void djikstra(int nod){
    for(int i=1;i<=N;++i)d[i]=0x3f3f3f3f;
    d[nod]=0;
    coada.push(nod);
    while(!coada.empty()){
        x=coada.front();
        coada.pop();
        for(int i=0;i<G[x].size();++i)
            if(d[G[x][i]]>d[i]+1){
                d[G[x][i]]=d[i]+1;
                coada.push(G[x][i]);
            }
    }
    int Min=0x3f3f3f3f;
    for(int i=1;i<=N;++i)
        if(i!=nod)
            Min=min(Min,d[i]);
    int nr=0;
    for(int i=1;i<=N;++i)
        if(d[i]==Min)
            ++nr;
    v[nod].nr=nr,v[nod].MIN=Min;
}
int main()
{
    freopen("zmeu2.in","r",stdin);
    freopen("zmeu2.out","w",stdout);
    scanf("%d%d",&N,&K);
    for(int i=1;i<N;++i)scanf("%d%d",&x,&y),G[x].push_back(y),G[y].push_back(x);
    for(int i=1;i<=N;++i)
        v[i].ind=i,djikstra(i);
    sort(v+1,v+N+1,cmp);
    x=0;
    for(int i=1;i<=K;++i)x=max(x,v[i].MIN);
    printf("%d\n",x);
    for(int i=1;i<=K;++i)printf("%d ",v[i].ind);
    return 0;
}