Cod sursa(job #1473515)

Utilizator akaprosAna Kapros akapros Data 19 august 2015 15:45:41
Problema Salvare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#define maxN 1002
#define inf 1000000000
using namespace std;
int n, nr, Nr, i, j, k, maxd, d[maxN];
bool vis[maxN], hc[maxN], Hc[maxN];
vector < int > V[maxN];

void read()
{
    int x, y;
    freopen("salvare.in", "r", stdin);
    scanf("%d %d", &n, &k);
    for (i = 1; i < n; ++ i)
    {
        scanf("%d %d", &x, &y);
        V[x].push_back(y);
        V[y].push_back(x);
    }
}
void dfs(int x)
{
    int i, minv = 0, maxv = 0, sons = 0, node;
    vis[x] = 1;

    for (i = 0; i < V[x].size(); ++ i)
        if (!vis[node = V[x][i]])
        {
            ++ sons;
            dfs(node);
            minv = min(minv, d[node]);
            maxv = max(maxv, d[node]);
        }
    if (!sons)
    {
        d[x] = 1;
        return ;
    }

    if (-minv >= maxv + 1)
        d[x] = minv + 1;
    else
    {
        d[x] = maxv + 1;
        if (d[x] == maxd + 1 || x == 1)
        {
            d[x] = - maxd;
            hc[x] = 1;
            ++ nr;
        }
    }
}
int ok(int x)
{
    maxd = x;
    memset(vis, 0, sizeof(vis));
    memset(hc, 0, sizeof(hc));
    memset(d, 0, sizeof(d));
    nr = 0;
    dfs(1);
    return nr <= k;
}
int bs()
{
    int i = n, p = 1 << 9;
    while (p)
    {
        if (i - p > 0 && ok(i - p))
        {
            memset(Hc, 0, sizeof(Hc));
            Nr = nr;
            i -= p;
            memcpy(Hc, hc, sizeof(hc));
        }
        p /= 2;
    }
    return i;
}
void write()
{
    int nr;
    freopen("salvare.out", "w", stdout);
    printf("%d\n", bs());
    i = 1;
    nr = Nr;
    while (nr < k && i <= n)
    {
        if (!Hc[i])
        {
            Hc[i] = 1;
            ++ nr;
        }
        ++ i;
    }
    for (i = 1; i <= n; ++ i)
        if (Hc[i])
           printf("%d ", i);
}
int main()
{
    read();
    write();
}