Submission #260269

#TimeUsernameProblemLanguageResultExecution timeMemory
260269infiniteproMeetings (JOI19_meetings)C++17
100 / 100
1223 ms3192 KiB
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
#pragma GCC optimization ("Ofast")
#include<bits/stdc++.h>
#include"meetings.h"
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

typedef vector<int> vi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;

#define INF INT_MAX
#define MOD 1000000007
#define all(x) x.begin(), x.end()

map<ii, int> qr;
int ask(int u, int v){
    if(u>v)swap(u,v);
    if(u==v)return u;
    if(qr.find({u,v}) == qr.end())
        qr[{u,v}] = Query(0, u, v);
    return qr[{u,v}];
}

vi sol;
void doit(int root, vi S){
    unordered_map<int, vi> tmp;
    vi path;

    int u = S[rand()%S.size()];
    for(auto v : S){
        int p = ask(u, v);
        if(p == v) path.push_back(v);
        else tmp[p].push_back(v);
    }

    sort(all(path), [&](int a, int b){
        return (ask(a, b) == a);
    });
    for(int x = 1; x < path.size(); x++){
        sol[path[x]] = path[x-1];
    }
    sol[path[0]] = root;

    for(auto [rt, s] : tmp){
        doit(rt, s);
    }
    return;
}

void Solve(int N){
    vi S; sol.resize(N);
    for(int x = 1; x < N; x++)
        S.push_back(x);
    doit(0, S);

    for(int x = 1; x < N; x++)
        Bridge(min(sol[x], x), max(sol[x], x));
    
}

Compilation message (stderr)

meetings.cpp:2:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization ("O3")
 
meetings.cpp:3:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization ("unroll-loops")
 
meetings.cpp:4:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization ("Ofast")
 
meetings.cpp: In function 'void doit(int, vi)':
meetings.cpp:47:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int x = 1; x < path.size(); x++){
                    ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...