Submission #242425

# Submission time Handle Problem Language Result Execution time Memory
242425 2020-06-27T16:13:09 Z joseacaz Friend (IOI14_friend) C++17
27 / 100
37 ms 1528 KB
#include "friend.h"
#include <bits/stdc++.h>

#define pb push_back

using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int MAXN = 1005;
int prot[3], on[MAXN], DP[MAXN][2], visDP[MAXN][2];
int ans, c[MAXN];
vi Graph[MAXN];

int solve(int node, int f)
{
    if(visDP[node][f])
        return DP[node][f];
    visDP[node][f] = 1;

    int res1 = 0, res2 = 0;
    for(auto i : Graph[node])
    {
        if(visDP[i][1])
            continue;
        res1 += solve(i, 1);
        res2 += solve(i, 0);
    }
    
    visDP[node][f] = 1;
    if(f)
        return DP[node][f] = max(res1, res2 + c[node]);
    else
        return DP[node][f] = res1;
}

// Find out best sample
int findSample(int N, int _conf[], int host[], int protocol[])
{
    if(N > 1000)
        return 0;

    for(int i = 0; i < N; i++)
    {
        c[i] = _conf[i];
        if(i >= 1)
            prot[protocol[i]]++;
    }
    
    //S1
    if(N <= 10)
    {
        for(int i = 1; i < N; i++)
        {
            if(protocol[i] == 0)
            {
                Graph[host[i]].pb(i);
                Graph[i].pb(host[i]);
            }
            else if(protocol[i] == 1)
            {
                for(auto v : Graph[host[i]])
                {
                    Graph[v].pb(i);
                    Graph[i].pb(v);
                }
            }
            else if(protocol[i] == 2)
            {
                for(auto v : Graph[host[i]])
                {
                    Graph[v].pb(i);
                    Graph[i].pb(v);
                }
                Graph[host[i]].pb(i);
                Graph[i].pb(host[i]);
            }
        }
        int aux;
        for(int i = 0; i < (1 << N); i++)
        {
            aux = 0;
            for(int j = 0; j < N; j++)
            {
                on[j] = 0;
                if(i & (1 << j))
                {
                    on[j] = 1;
                    aux += c[j];
                }
            }
            
            bool ind = 1;
            for(int node = 0; node < N; node++)
                if(on[node])
                    for(auto j : Graph[node])
                        if(on[j])
                            ind = 0;
            if(!ind)
                continue;
            ans = max(ans, aux);
        }
    }
    //S2
    else if(prot[1] == N - 1)
    {
        for(int i = 0; i < N; i++)
            ans += c[i];
    }
    //S3
    else if(prot[2] == N - 1)
    {
        for(int i = 0; i < N; i++)
            ans = max(ans, c[i]);
    }
    //S4
    else if(prot[0] == N - 1)
    {
        for(int i = 1; i < N; i++)
        {
            if(protocol[i] == 0)
            {
                Graph[host[i]].pb(i);
                Graph[i].pb(host[i]);
            }
        }
        ans = solve(0, 1);
    }
    //S5
    else if(prot[0] + prot[1] == N - 1)
    {
        for(int i = 1; i < N; i++)
        {
            if(protocol[i] == 0)
            {
                Graph[host[i]].pb(i);
                Graph[i].pb(host[i]);
            }
            else if(protocol[i] == 1)
            {
                for(auto v : Graph[host[i]])
                {
                    Graph[v].pb(i);
                    Graph[i].pb(v);
                }
            }
        }
        
        for(int i = 0; i < N; i++)
        {
            if(visDP[i][1])
                continue;
            ans += solve(i, 1);
        }
    }
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 4 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 6 ms 512 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 4 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 4 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Correct 5 ms 384 KB Output is correct
12 Correct 5 ms 384 KB Output is correct
13 Correct 5 ms 384 KB Output is correct
14 Correct 4 ms 384 KB Output is correct
15 Correct 5 ms 384 KB Output is correct
16 Correct 5 ms 384 KB Output is correct
17 Correct 5 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 5 ms 384 KB Output is correct
7 Correct 6 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 5 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Correct 5 ms 384 KB Output is correct
5 Incorrect 5 ms 512 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Correct 4 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 5 ms 384 KB Output is correct
7 Correct 5 ms 384 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Incorrect 5 ms 512 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 5 ms 384 KB Output is correct
4 Correct 4 ms 384 KB Output is correct
5 Correct 5 ms 384 KB Output is correct
6 Correct 5 ms 384 KB Output is correct
7 Correct 5 ms 256 KB Output is correct
8 Correct 5 ms 384 KB Output is correct
9 Correct 5 ms 384 KB Output is correct
10 Correct 5 ms 384 KB Output is correct
11 Correct 5 ms 384 KB Output is correct
12 Incorrect 37 ms 1528 KB Output isn't correct
13 Halted 0 ms 0 KB -