Cod sursa(job #2716326)

Utilizator rotarmirRotar Raul rotarmir Data 5 martie 2021 00:03:09
Problema Salvare Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fi("salvare.in");
ofstream fo("salvare.out");
int n;
int k;
vector <int>vec[1001];
vector <int>sol;
int mat[1001][1001];
int value[1001];
int viz[1001];
void DFS(int X,int x,int con)
{
    mat[X][x]=con;
    mat[X][0]+=con;
    for(int i=0;i<=vec[x].size()-1;i++)
    {
        if(viz[vec[x][i]]==0)
        {
            viz[vec[x][i]]=1;
            DFS(X,vec[x][i],con+1);
        }
    }
}
int main()
{
    fi>>n>>k;
    int x,y;
    for(int i=1;i<=n-1;i++)
    {
        fi>>x>>y;
        vec[x].push_back(y);
        vec[y].push_back(x);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            viz[j]=0;
        viz[i]=1;
        DFS(i,i,0);
    }
    while(k!=0)
    {
        int mini=100000;
        int ind;
        for(int i=1;i<=n;i++)
        {
            if(mini>mat[i][0])
            {
                mini=mat[i][0];
                ind=i;
            }
        }
        sol.push_back(ind);
        mat[ind][0]=1000000;
        k--;
    }
    int rez[1001];
    for(int i=1;i<=n;i++)
        rez[i]=100000;
    for(int i=0;i<=sol.size()-1;i++)
    {
        mat[sol[i]][sol[i]]=0;
        for(int j=1;j<=n;j++)
        {
            rez[j]=min(rez[j],mat[sol[i]][j]);
        }
    }
    int mx=0;
    for(int i=1;i<=n;i++)
        mx=max(mx,rez[i]);
    fo<<mx<<endl;
    for(int i=0;i<=sol.size()-1;i++)
        fo<<sol[i]<<" ";
    return 0;
}