이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "islands.h"
#include <bits/stdc++.h>
#define eb emplace_back
#define sz(V) ((int)(V).size())
#define allv(V) ((V).begin()),((V).end())
#define delv(V,x) (V).erase(find(allv(V),(x)))
using namespace std;
const int MAXN = 100'055;
const int MAXM = 200'055;
vector<int> G[MAXN], T[MAXN];
int oc[MAXN];
bitset<MAXM> dead;
variant<bool, vector<int>> find_journey(int N, int M, vector<int> A, vector<int> B) {
for(int i = M; i--;) {
G[A[i]].eb(i);
T[B[i]].eb(i);
oc[A[i]]++;
}
vector<int> PV;
int S = 0;
vector<int> ZV;
for(int i = N; i--;) if(!oc[i]) ZV.eb(i);
while(1 == oc[S] || !ZV.empty()) {
if(1 == oc[S]) {
int e = *find_if(allv(G[S]), [&](int e){ return !dead[e]; });
PV.eb(e);
dead[e] = true;
oc[S] = 0;
ZV.eb(S);
S = B[e];
}
int i = ZV.back(); ZV.pop_back();
for(int e : T[i]) {
dead[e] = true;
int v = A[e];
if(!--oc[v]) ZV.eb(v);
}
}
for(int i = N; i--;) G[i].clear();
for(int i = M; i--;) if(!dead[i]) G[A[i]].eb(i);
if(G[S].empty()) return false;
for(int i = N; i--;)
G[i].resize(i == S ? 2 : 1);
for(int i = M; i--;) A[i] ^= B[i];
dead.reset();
vector<int> CV;
int pve = -1, v = S;
do {
for(int e : G[v]) if(e != pve) {
CV.eb(e);
pve = e;
dead[e] = !dead[e];
delv(G[v], e);
v ^= A[e];
G[v].eb(e);
break;
}
} while(v != S || dead.any());
vector<int> r = PV;
r.insert(r.end(), allv(CV));
reverse(allv(PV));
r.insert(r.end(), allv(PV));
return r;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |