Submission #1270417

#TimeUsernameProblemLanguageResultExecution timeMemory
1270417k12_khoiBosses (BOI16_bosses)C++17
100 / 100
367 ms744 KiB
#include <bits/stdc++.h>
using namespace std;

const int N=5005;
const int oo=1e9+1;

int n,k,x,y,sum,res;
int a[N],salary[N],step_father[N];
bool used[N];
vector <int> g[N];

namespace sub1
{
    void ql(int i)
    {
        if (i>n)
        {
            for (int i=1;i<=n;i++)
            salary[i]=1;

            for (int i=n;i>1;i--)
            salary[step_father[a[i]]]+=salary[a[i]];

            sum=0;
            for (int i=1;i<=n;i++)
            sum+=salary[i];

            res=min(res,sum);

            return;
        }

        for (int j=1;j<i;j++)
        {
            int u=a[j];

            for (int v:g[u])
            if (!used[v])
            {
                used[v]=true;
                a[i]=v;
                step_father[v]=u;

                ql(i+1);

                step_father[v]=0;
                a[i]=0;
                used[v]=false;
            }
        }
    }

    void solve()
    {
        res=oo;
        for (int i=1;i<=n;i++)
        {
            used[i]=true;
            a[1]=i;
            step_father[i]=0;

            ql(2);

            a[1]=0;
            used[i]=false;
        }

        cout << res;
    }
}

namespace sub3
{
    queue <int> q;

    int bfs(int u)
    {
        for (int i=1;i<=n;i++)
        salary[i]=oo;

        salary[u]=1;
        q.push(u);

        while (!q.empty())
        {
            u=q.front();
            q.pop();

            for (int v:g[u])
            if (salary[v]>salary[u]+1)
            {
                salary[v]=salary[u]+1;
                q.push(v);
            }
        }

        int sum=0;
        for (int i=1;i<=n;i++)
        {
            if (salary[i]==oo) return oo;
            sum+=salary[i];
        }

        return sum;
    }

    void solve()
    {
        res=oo;
        for (int i=1;i<=n;i++)
        res=min(res,bfs(i));

        cout << res;
    }
}

int main()
{
    ios_base::sync_with_stdio(NULL);
    cin.tie(NULL); cout.tie(NULL);

    cin >> n;
    for (int i=1;i<=n;i++)
    {
        cin >> k;

        x=i;
        for (int j=1;j<=k;j++)
        {
            cin >> y;
            g[y].push_back(x);
        }
    }

    sub3::solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...