Submission #290276

# Submission time Handle Problem Language Result Execution time Memory
290276 2020-09-03T15:02:52 Z MasterTaster Bosses (BOI16_bosses) C++14
100 / 100
755 ms 896 KB
#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
#define pii pair<int, int>
#define xx first
#define yy second
#define endl "\n"

vector<int> g[5010], p[15];
ll n, k[5010], koga[15], trRess;
//bool bio[15];
ll ress;

ll d[5010];
bool bio[5010];

int dfs(int u)
{
    bio[u]=true;
    //cout<<u<<endl;
    int suma=0;
    for (auto v:g[u])
    {
        if (!bio[v])
        {
            suma+=dfs(v);
        }
    }
    trRess+=suma+1;
    return (suma)+1;
}

void popravi()
{
    int koliko=0, root=-1;
    for (int i=1; i<=n; i++)
    {
        if (koga[i]==-1) { koliko++; root=i; }
    }

    if (koliko!=1) return;

    for (int i=1; i<=n; i++) { g[i].clear(); bio[i]=false; }
    for (int i=1; i<=n; i++) { if (i!=root) g[koga[i]].pb(i); }

    trRess=0;
    dfs(root);

    for (int i=1; i<=n; i++) if (!bio[i]) return;

    //for (int i=1; i<=n; i++) cout<<koga[i]<<" ";
    //cout<<endl<<trRess<<endl;
    ress=min(ress, trRess);
}

void uradi(int x, bool bio)
{
    if (x==n+1)
    {
        popravi();
        return;
    }

    if (!bio) { koga[x]=-1; uradi(x+1, true); }
    for (int i=0; i<k[x]; i++)
    {
        koga[x]=p[x][i];
        uradi(x+1, bio);
    }
}

ll bfs(int s)
{
    queue<int> q;
    q.push(s);
    d[s]=1;
    bio[s]=true;
    while (!q.empty())
    {
        int u=q.front();
        q.pop();
        for (auto v:g[u])
        {
            if (!bio[v])
            {
                d[v]=d[u]+1;
                bio[v]=true;
                q.push(v);
            }
        }
    }

    for (int i=1; i<=n; i++) if (!bio[i]) return 1000000010;

    ll ret=0;
    for (int i=1; i<=n; i++) ret+=d[i];
    return ret;
}

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

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

    //ress=1010;
    //uradi(1, 0);

    ress=10000010;
    for (int i=1; i<=n; i++)
    {
        for (int i=1; i<=n; i++) bio[i]=false;
        trRess=bfs(i);
        //cout<<trRess<<endl;
        ress=min(ress, trRess);
    }

    cout<<ress;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 512 KB Output is correct
2 Correct 0 ms 512 KB Output is correct
3 Correct 0 ms 512 KB Output is correct
4 Correct 1 ms 512 KB Output is correct
5 Correct 1 ms 512 KB Output is correct
6 Correct 0 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 512 KB Output is correct
2 Correct 0 ms 512 KB Output is correct
3 Correct 0 ms 512 KB Output is correct
4 Correct 1 ms 512 KB Output is correct
5 Correct 1 ms 512 KB Output is correct
6 Correct 0 ms 512 KB Output is correct
7 Correct 1 ms 512 KB Output is correct
8 Correct 1 ms 512 KB Output is correct
9 Correct 1 ms 512 KB Output is correct
10 Correct 1 ms 512 KB Output is correct
11 Correct 1 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 512 KB Output is correct
2 Correct 0 ms 512 KB Output is correct
3 Correct 0 ms 512 KB Output is correct
4 Correct 1 ms 512 KB Output is correct
5 Correct 1 ms 512 KB Output is correct
6 Correct 0 ms 512 KB Output is correct
7 Correct 1 ms 512 KB Output is correct
8 Correct 1 ms 512 KB Output is correct
9 Correct 1 ms 512 KB Output is correct
10 Correct 1 ms 512 KB Output is correct
11 Correct 1 ms 512 KB Output is correct
12 Correct 5 ms 512 KB Output is correct
13 Correct 4 ms 512 KB Output is correct
14 Correct 136 ms 760 KB Output is correct
15 Correct 15 ms 640 KB Output is correct
16 Correct 571 ms 768 KB Output is correct
17 Correct 755 ms 804 KB Output is correct
18 Correct 741 ms 896 KB Output is correct