제출 #974291

#제출 시각아이디문제언어결과실행 시간메모리
974291Tuanlinh123게임 (APIO22_game)C++17
0 / 100
4 ms23000 KiB
#include "game.h" #include<bits/stdc++.h> #define ll int #define pll pair<ll, ll> #define pb push_back #define mp make_pair #define fi first #define se second #define ld long double #define sz(a) ((ll)(a).size()) using namespace std; const ll maxn=300005; ll n, k, a[20][maxn]; vector <ll> A[maxn], At[maxn]; bool ismid[20][maxn]; ll propagate(ll i, ll u, ll t) { queue <ll> q; if (a[i][u]+t==3) return 1; if (!a[i][u]) a[i][u]=t, q.push(u); while (sz(q)) { ll u=q.front(); q.pop(); for (ll v:(t==1?A[u]:At[u])) { if (a[i][v]+t==3) return 1; if (!a[i][v]) a[i][v]=t, q.push(v); } } return 0; } ll addedge(ll u, ll v) { A[u].pb(v), At[v].pb(u); for (ll i=0; i<20; i++) { if (a[i][u]==1) if (propagate(i, v, 1)) return 1; if (a[i][v]==2 || ismid[i][v]) if (propagate(i, u, 2)) return 1; } return 0; } void init(int N, int K) { n=N, k=K; function <void(ll, ll, ll)> init=[&](ll l, ll r, ll lay) { if (l>r) return; ll mid=(l+r)/2; a[lay][mid]=ismid[lay][mid]=1; init(l, mid-1, lay+1), init(mid+1, r, lay+1); }; init(0, k-1, 0); for (ll i=0; i+1<k; i++) addedge(i, i+1); } int add_teleporter(int u, int v) {return addedge(u, v);}
#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...