이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "meetings.h"
#define here cerr<<"===========================================\n"
#define dbg(x) cerr<<#x<<": "<<x<<endl;
#include "bits/stdc++.h"
//#include <ext/pb_ds/tree_policy.hpp>
//#include <ext/pb_ds/assoc_container.hpp>
#define ld double
#define ll int
#define llinf 100000000000000000LL // 10^17
#define pb push_back
#define popb pop_back
#define fi first
#define sc second
#define endl '\n'
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define sz(a) (ll)(a.size())
#define all(a) a.begin(),a.end()
#define ceri(a,l,r) {cerr<<#a<<": ";for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;}
#define cer(a) {cerr<<#a<<": ";for(ll x_ : a) cerr<<x_<< " ";cerr<<endl;}
#define daj_mi_malo_vremena ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0);
using namespace std;
#define maxn 2005
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll n;
ll ask(ll x,ll y,ll z){
return Query(x,y,z);
}
void ans(ll x,ll y){
if(x>y) swap(x,y);
Bridge(x,y);
}
ll xcur;
bool cmp(ll x,ll y){
return ask(xcur,x,y)==x;
}
void reshi(vector<ll> v){
ll n = sz(v);
if(n<=1) return;
if(n==2){ans(v[0],v[1]);return;}
shuffle(all(v),rng);
ll x = v[0],y = v[1];
map<ll,vector<ll> > mp;
mp[x].pb(x); mp[y].pb(y);
for(ll i = 2;i<n;i++){
ll z = v[i];
ll u = ask(x,y,z);
mp[u].pb(z);
}
vector<ll> w;
w.pb(x);
for(auto it : mp) if(it.fi!=x&&it.fi!=y) w.pb(it.fi);
w.pb(y);
xcur = x;
sort(w.begin()+1,w.end()-1,cmp);
for(ll i = 1;i<sz(w);i++) ans(w[i],w[i-1]);
for(auto it : mp) reshi(it.sc);
}
void Solve(int N) {
n = N;
vector<ll> v(n);
iota(all(v),0);
reshi(v);
}
/*
5
0 1
0 2
1 3
1 4
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |