Submission #1328482

#TimeUsernameProblemLanguageResultExecution timeMemory
1328482QuocSenseiICC (CEOI16_icc)C++20
7 / 100
170 ms612 KiB
#include "icc.h"
#include <bits/stdc++.h>

#define ll long long 
#define el cout << endl
#define ii pair<int, int>
#define fi first 
#define se second

using namespace std;

const int maxn = 1e2;

struct DSU
{
    int n;
    vector<int> leader, sz;

    DSU(int n = 0) : n(n)
    {
        leader.assign(n + 10, 0);
        sz.assign(n + 10, 1);
        iota(leader.begin(), leader.end(), 0);
    }
    int find_leader(int x)
    {
        if (x == leader[x])
            return x;
        return leader[x] = find_leader(leader[x]);
    }
};

int do_query(vector<int> a, vector<int> b)
{
    int sz_a = a.size();
    int sz_b = b.size();
    int _a[sz_a];
    int _b[sz_b];
    for (int i = 0; i < sz_a; i++)
        _a[i] = a[i];
    for (int i = 0; i < sz_b; i++)
        _b[i] = b[i];
    return query(sz_a, sz_b, _a, _b);
}

namespace SUBTASK_1
{
    int n;
    DSU D;

    void run(int N)
    {
        n = N;
        D = DSU(n);
        for (int _ = 1; _ <= n - 1; _++)
        {
            for (int i = 1; i <= n; i++)
            {
                bool flag = 0;
                for (int j = i + 1; j <= n; j++)
                {
                    if (D.find_leader(i) == D.find_leader(j))
                        continue;
                    if (do_query({i}, {j}))
                    {
                        setRoad(i, j);
                        flag = 1;
                        break;
                    }
                }
                if (flag)
                    break;
            }
        }
    }
    bool check_sub(int n)
    {
        return n == 15;
    }
};
namespace SUBTASK_2
{
    int n;
    bool check[maxn + 10][maxn + 10];
    DSU D;

    void run(int N)
    {
        memset(check, 0, sizeof check);
        n = N;
        D = DSU(n);
        for (int _ = 1; _ < n; _++)
        {
            vector<int> x;
            for (int i = 1; i <= n; i++)
            {
                vector<int> y;
                for (int j = 1; j <= n; j++)
                {
                    if (D.find_leader(i) == D.find_leader(j))
                        continue;
                    y.push_back(j);
                }
                if (do_query({i}, y))
                    x.push_back(i);
            }
            check[x[0]][x[1]] = check[x[1]][x[0]] = 1;
            setRoad(x[0], x[1]);
        }
    }
};

void run(int N)
{
    SUBTASK_1::run(N);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...