Cod sursa(job #2777959)

Utilizator marcumihaiMarcu Mihai marcumihai Data 26 septembrie 2021 17:36:01
Problema Salvare Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("salvare.in");
ofstream g ("salvare.out");


int n,k;
int dp[10005];
vector <int> v[10005];
int rez;
void dfs(int nod , int tata , int dist )
{
    int vecini=0;
    for(int x=0;x<v[nod].size();++x)
    {
        if(v[nod][x]!=tata)
        {
            int fiu=v[nod][x];
            if(dp[nod]+1>dist)
            {
                dp[fiu]=0;
                ++rez;
                dfs(fiu,nod,dist);

            }
            else
            {
                dp[fiu]=dp[nod]+1;
                dfs(fiu,nod,dist);
            }
            ++vecini;
        }
    }

}

int ok(int dist)
{
    rez=0;
    for(int i=1;i<=n;++i)
        dp[i]=0;

    dfs(1 , 0 , dist);
    if(rez>k)
        return 0;
    return 1;

}
int main()
{
    f>>n>>k;
    for(int i=1;i<=n;++i)
    {
        int x , y;
        f>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
    int st=1;
    int dr=n;

    int mij=(st+dr)/2;
    while(st<=dr)
    {
        int lejereanu=ok(mij);
        if(lejereanu==1 && ok(mij-1)==0)
        {
            g<<mij<<"\n";
            break;
        }
        if(ok(mij)==0)
            st=mij+1;
        else
            dr=mij-1;

        mij=(st+dr)/2;
    }
    ok(mij);
    for(int i=1;i<=n;++i)
        if(dp[i]==0)
            g<<i<<" ";
    return 0;
}