Submission #792105

# Submission time Handle Problem Language Result Execution time Memory
792105 2023-07-24T15:18:45 Z caganyanmaz Friend (IOI14_friend) C++17
46 / 100
19 ms 1492 KB
#include <bits/stdc++.h>
#define pb push_back
#include "friend.h"
using namespace std;

int n;
int *conf;
int *h;
int *p;

constexpr static int IAM = 0;
constexpr static int MYF = 1;
constexpr static int WER = 2;

constexpr static int MX1 = 10;
int c[MX1][MX1];

int subtask1()
{
        for (int i = 1; i < n; i++)
        {
                if (p[i] == IAM || p[i] == WER)
                        c[h[i]][i] = c[i][h[i]] = 1;
                if (p[i] == MYF || p[i] == WER)
                        for (int j = 0; j < i; j++)
                                if (c[j][h[i]])
                                        c[j][i] = c[i][j] = 1;
        }
        int res = 0;
        for (int i = 0; i < (1<<n); i++)
        {
                vector<int> v;
                for (int j = 0; j < n; j++)
                        if (i & (1<<j))
                                v.pb(j);
                bool found = false;
                for (int j = 0; j < v.size(); j++)
                        for (int k = j+1; k < v.size(); k++)
                                if (c[v[j]][v[k]])
                                        found = true;
                if (found)
                        continue;
                int sum = 0;
                for (int i : v)
                        sum += conf[i];
                res = max(res, sum);
        }
        return res;
}

int subtask2()
{
        int sum = 0;
        for (int i = 0; i < n; i++)
                sum += conf[i];
        return sum;
}

int subtask3()
{
        int best = 0;
        for  (int i = 0; i < n; i++)
                best = max(best, conf[i]);
        return best;
}

constexpr static int MXSIZE = 1000;
int dp[MXSIZE][2];
vector<int> g[MXSIZE];

void dfs4(int node)
{
        dp[node][1] = conf[node];
        for (int c : g[node])
        {
                dfs4(c);
                dp[node][1] += dp[c][0];
                dp[node][0] += max(dp[c][0], dp[c][1]);
        }
}

int subtask4()
{
        for (int i = 1; i < n; i++)
                g[h[i]].pb(i);
        dfs4(0);
        return max(dp[0][0], dp[0][1]);
}

int colord[MXSIZE][2];
int _col[MXSIZE];
int comp[MXSIZE];

void dfs5(int node, int c, int color)
{
        comp[node] = c;
        colord[node][color]++;
        for (int cc : g[node])
                if (comp[cc] == -1)
                        dfs5(cc, c, color^1);
                else
                        assert(_col[cc] == (color^1));
}

int subtask5()
{
        for (int i = 1; i < n; i++)
        {
                if (p[i] == IAM)
                {
                        g[h[i]].pb(i);
                        g[i].pb(h[i]);
                }
                else
                {
                        //assert(p[i] == MYF);
                        for (int j : g[h[i]])
                        {
                                g[j].pb(i);
                                g[i].pb(j);
                        }
                }
        }
        for (int i = 0; i < n; i++)
                comp[i] = -1;
        int csize = 0;
        for (int i = 0; i < n; i++)
                if (comp[i] == -1)
                        dfs5(i, csize++, 0);
        int res = 0;
        for (int i = 0; i < csize; i++)
                res += max(colord[i][0], colord[i][1]);
        return res;
}

// Find out best sample
int findSample(int _n,int _conf[],int _h[],int _p[])
{
        n = _n;
        conf = _conf;
        h = _h;
        p = _p;
        if (n <= 10)
                return subtask1();
        bool seen_wer = p[1] == WER;
        int current = p[1];
        for (int i = 2; i < n; i++)
        {
                if (p[i] != current)
                        current = -1;
                if (p[i] == WER)
                        seen_wer = true;
        }
        if (current == MYF)
                return subtask2();
        if (current == WER)
                return subtask3();
        if (current == IAM)
                return subtask4();
        if (!seen_wer)
                return subtask5();
        return 42;
}

Compilation message

friend.cpp: In function 'int subtask1()':
friend.cpp:37:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |                 for (int j = 0; j < v.size(); j++)
      |                                 ~~^~~~~~~~~~
friend.cpp:38:45: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |                         for (int k = j+1; k < v.size(); k++)
      |                                           ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 0 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
16 Correct 0 ms 340 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 0 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Runtime error 1 ms 596 KB Execution killed with signal 6
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Incorrect 19 ms 1492 KB Output isn't correct
13 Halted 0 ms 0 KB -