Submission #561924

# Submission time Handle Problem Language Result Execution time Memory
561924 2022-05-13T18:45:54 Z timreizin Meetings (JOI19_meetings) C++17
29 / 100
367 ms 1348 KB
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")

#include "meetings.h"
#include <random>
#include <vector>
#include <set>
#include <numeric>
#include <algorithm>
#include <map>
#include <cassert>

using namespace std;

vector<vector<int>> adj;
mt19937 gen(555);
int q = 0;

int find(vector<int> vertices, int pivot, set<int> path)
{
    if (vertices.size() == 1) return vertices.front();
    if (vertices.size() == 2)
    {
        adj[vertices.front()].push_back(vertices.back());
        adj[vertices.back()].push_back(vertices.front());
    }
    else
    {
        vector<int> path;
        map<int, vector<int>> comps;
        int x = uniform_int_distribution<>(0, (int)vertices.size() - 1)(gen);
        int y = x;
        while (y == x) y = uniform_int_distribution<>(0, (int)vertices.size() - 1)(gen);
        x = vertices[x];
        y = vertices[y];
        for (int i = 0; i < vertices.size(); ++i)
        {
            if (x == vertices[i] || y == vertices[i]) continue;
            int r = Query(x, y, vertices[i]);
            ++q;
            if (r != vertices[i]) comps[r].push_back(vertices[i]);
            else path.push_back(r);
        }
        for (auto &[pivot, vertices]: comps)
        {
            /*vector<bool> used(vertices.size());
            int left = vertices.size();
            while (left)
            {
                int p = uniform_int_distribution<>(1, left)(gen);
                for (int i = 0; i < vertices.size(); ++i)
                {
                    p -= !used[i];
                    if (!p)
                    {
                        --left;
                        used[i] = true;
                        p = vertices[i];
                        break;
                    }
                }
                vector<int> next{p};
                set<int> path;
                for (int i = 0; i < vertices.size(); ++i)
                {
                    if (!used[i])
                    {
                        int r = Query(vertices[i], p, pivot);
                        ++q;
                        if (r != pivot)
                        {
                            used[i] = true;
                            --left;
                            next.push_back(vertices[i]);
                            if (r == vertices[i]) path.insert(r);
                        }
                    }
                }
                int e = find(next, p, path);
                adj[pivot].push_back(e);
                adj[e].push_back(pivot);
            }*/
            vertices.push_back(pivot);
            find(vertices, pivot, set<int>());
        }
        sort(path.begin(), path.end(), [&x](int a, int b) { return Query(x, a, b) == a; });
        if (!path.empty())
        {
            adj[x].push_back(path.front());
            adj[path.front()].push_back(x);
            adj[y].push_back(path.back());
            adj[path.back()].push_back(y);
        }
        else
        {
            adj[x].push_back(y);
            adj[y].push_back(x);
        }
        for (int i = 0; i + 1 < path.size(); ++i)
        {
            adj[path[i]].push_back(path[i + 1]);
            adj[path[i + 1]].push_back(path[i]);
        }
    }
    int v = pivot;
    while (!path.empty())
    {
        for (int u : adj[v])
        {
            if (path.find(u) != path.end())
            {
                path.erase(u);
                v = u;
            }
        }
    }
    return v;
}

void Solve(int n)
{
    adj.resize(n);
    set<int> path;
    vector<int> vertices(n);
    iota(vertices.begin(), vertices.end(), 0);
    find(vertices, 0, path);
    for (int i = 0; i < n; ++i)
    {
        for (int u : adj[i])
        {
            if (i < u) Bridge(i, u);
        }
    }
    assert(q <= 22500);
}

Compilation message

meetings.cpp: In function 'int find(std::vector<int>, int, std::set<int>)':
meetings.cpp:36:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |         for (int i = 0; i < vertices.size(); ++i)
      |                         ~~^~~~~~~~~~~~~~~~~
meetings.cpp:99:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   99 |         for (int i = 0; i + 1 < path.size(); ++i)
      |                         ~~~~~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 336 KB Output is correct
2 Correct 0 ms 336 KB Output is correct
3 Correct 0 ms 336 KB Output is correct
4 Correct 0 ms 336 KB Output is correct
5 Correct 0 ms 336 KB Output is correct
6 Correct 0 ms 336 KB Output is correct
7 Correct 0 ms 336 KB Output is correct
8 Correct 0 ms 336 KB Output is correct
9 Correct 0 ms 336 KB Output is correct
10 Correct 0 ms 336 KB Output is correct
11 Correct 0 ms 336 KB Output is correct
12 Correct 0 ms 336 KB Output is correct
13 Correct 0 ms 336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 336 KB Output is correct
2 Correct 0 ms 336 KB Output is correct
3 Correct 0 ms 336 KB Output is correct
4 Correct 0 ms 336 KB Output is correct
5 Correct 0 ms 336 KB Output is correct
6 Correct 0 ms 336 KB Output is correct
7 Correct 0 ms 336 KB Output is correct
8 Correct 0 ms 336 KB Output is correct
9 Correct 0 ms 336 KB Output is correct
10 Correct 0 ms 336 KB Output is correct
11 Correct 0 ms 336 KB Output is correct
12 Correct 0 ms 336 KB Output is correct
13 Correct 0 ms 336 KB Output is correct
14 Correct 0 ms 336 KB Output is correct
15 Correct 0 ms 336 KB Output is correct
16 Correct 0 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 0 ms 336 KB Output is correct
19 Correct 0 ms 336 KB Output is correct
20 Correct 0 ms 336 KB Output is correct
21 Correct 1 ms 336 KB Output is correct
22 Correct 0 ms 336 KB Output is correct
23 Correct 0 ms 336 KB Output is correct
24 Correct 0 ms 336 KB Output is correct
25 Correct 1 ms 336 KB Output is correct
26 Correct 0 ms 336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 336 KB Output is correct
2 Correct 0 ms 336 KB Output is correct
3 Correct 0 ms 336 KB Output is correct
4 Correct 0 ms 336 KB Output is correct
5 Correct 0 ms 336 KB Output is correct
6 Correct 0 ms 336 KB Output is correct
7 Correct 0 ms 336 KB Output is correct
8 Correct 0 ms 336 KB Output is correct
9 Correct 0 ms 336 KB Output is correct
10 Correct 0 ms 336 KB Output is correct
11 Correct 0 ms 336 KB Output is correct
12 Correct 0 ms 336 KB Output is correct
13 Correct 0 ms 336 KB Output is correct
14 Correct 0 ms 336 KB Output is correct
15 Correct 0 ms 336 KB Output is correct
16 Correct 0 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 0 ms 336 KB Output is correct
19 Correct 0 ms 336 KB Output is correct
20 Correct 0 ms 336 KB Output is correct
21 Correct 1 ms 336 KB Output is correct
22 Correct 0 ms 336 KB Output is correct
23 Correct 0 ms 336 KB Output is correct
24 Correct 0 ms 336 KB Output is correct
25 Correct 1 ms 336 KB Output is correct
26 Correct 0 ms 336 KB Output is correct
27 Correct 4 ms 392 KB Output is correct
28 Correct 3 ms 336 KB Output is correct
29 Correct 4 ms 388 KB Output is correct
30 Correct 4 ms 336 KB Output is correct
31 Correct 4 ms 336 KB Output is correct
32 Correct 5 ms 336 KB Output is correct
33 Correct 6 ms 336 KB Output is correct
34 Correct 8 ms 388 KB Output is correct
35 Correct 8 ms 336 KB Output is correct
36 Correct 5 ms 336 KB Output is correct
37 Correct 8 ms 400 KB Output is correct
38 Correct 11 ms 336 KB Output is correct
39 Correct 5 ms 336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 281 ms 628 KB Output is correct
2 Correct 367 ms 756 KB Output is correct
3 Correct 359 ms 716 KB Output is correct
4 Correct 328 ms 684 KB Output is correct
5 Correct 260 ms 600 KB Output is correct
6 Correct 225 ms 584 KB Output is correct
7 Correct 338 ms 668 KB Output is correct
8 Correct 348 ms 720 KB Output is correct
9 Correct 317 ms 840 KB Output is correct
10 Runtime error 339 ms 1348 KB Execution killed with signal 6
11 Halted 0 ms 0 KB -