답안 #668369

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
668369 2022-12-03T17:35:51 Z finn__ CEOI16_icc (CEOI16_icc) C++17
0 / 100
3 ms 468 KB
#include "icc.h"
#include <bits/stdc++.h>
using namespace std;

int *c, *d;

void dfs(
    vector<vector<unsigned>> const &g, unsigned u, vector<unsigned> &y,
    vector<bool> &vis)
{
    y.push_back(u);
    vis[u] = 1;

    for (unsigned v : g[u])
        if (!vis[v])
            dfs(g, v, y, vis);
}

void fill_order(vector<vector<unsigned>> const &g, vector<vector<unsigned>> &y)
{
    vector<bool> vis(g.size(), 0);
    y.clear();

    for (unsigned i = 0; i < g.size(); i++)
    {
        if (!vis[i])
        {
            y.push_back({});
            dfs(g, i, y.back(), vis);
        }
    }
}

size_t add_components(int *z, vector<vector<unsigned>> const &y, size_t a, size_t b)
{
    size_t size = 0;
    for (size_t i = a; i < b; i++)
    {
        for (unsigned u : y[i])
        {
            z[size] = u + 1;
            size++;
        }
    }
    return size;
}

void run(int n)
{
    c = (int *)malloc(n * sizeof(int));
    d = (int *)malloc(n * sizeof(int));
    vector<vector<unsigned>> g(n);
    vector<vector<unsigned>> y;

    for (unsigned z = 0; z < n - 1; z++)
    {
        fill_order(g, y);
        size_t cs, ds;

        while (1)
        {
            random_shuffle(y.begin(), y.end());
            cs = add_components(c, y, 0, y.size() / 2);
            ds = add_components(d, y, y.size() / 2, y.size());

            if (query(cs, ds, c, d))
                break;
        }

        size_t a = 0, b = cs;

        while (a < b)
        {
            size_t mid = (a + b) / 2;

            if (query(mid, ds, c, d))
                b = mid;
            else
                a = mid + 1;
        }

        unsigned const u = c[a];
        a = 0, b = ds;

        while (a < b)
        {
            size_t mid = (a + b) / 2;

            if (query(cs, mid, c, d))
                b = mid;
            else
                a = mid + 1;
        }

        unsigned const v = d[a];
        setRoad(u, v);
        g[u - 1].push_back(v - 1);
        g[v - 1].push_back(u - 1);
    }

    free(c);
    free(d);
}

Compilation message

icc.cpp: In function 'void run(int)':
icc.cpp:55:28: warning: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Wsign-compare]
   55 |     for (unsigned z = 0; z < n - 1; z++)
      |                          ~~^~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 468 KB Wrong road!
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 468 KB Wrong road!
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 468 KB Wrong road!
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 468 KB Wrong road!
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 468 KB Wrong road!
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 468 KB Wrong road!
2 Halted 0 ms 0 KB -