This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "Alicelib.h"
void Alice(int n, int m, int *ii, int *jj) {
const int N = 1000, L = 10;
if (n == 1) {
InitG(1, 0);
return;
}
if (n == 2) {
InitG(2, m);
if (m == 1)
MakeG(0, 0, 1);
return;
}
int bb[N];
for (int b = 0, i = 0; i + 1 < n; b++)
if ((b & b - 1) != 0)
bb[i++] = b;
bb[n - 1] = (1 << L) - 1;
int n_ = n + L + 2, m_ = m + L + 1 + n;
for (int i = 0; i < n; i++)
for (int l = 0; l < L; l++)
if ((bb[i] & 1 << l) != 0)
m_++;
InitG(n_, m_);
m_ = 0;
for (int h = 0; h < m; h++)
MakeG(m_++, ii[h], jj[h]);
for (int l = 0; l + 1 < L; l++)
MakeG(m_++, n + l, n + l + 1);
MakeG(m_++, n + L - 1, n + L + 1);
MakeG(m_++, n + L, n + L + 1);
for (int i = 0; i < n; i++)
MakeG(m_++, n + L, i);
for (int i = 0; i < n; i++)
for (int l = 0; l < L; l++)
if ((bb[i] & 1 << l) != 0)
MakeG(m_++, n + l, i);
}
#include "Boblib.h"
#include <cstdlib>
#include <cstring>
void Bob(int n_, int m_, int ii[], int jj[]) {
const int N_ = 1012, L = 10;
int *ej[N_], eo[N_], bb[N_], pp[1 << L]; char type[N_];
if (n_ == 1) {
InitMap(1, 0);
return;
}
if (n_ == 2) {
InitMap(2, m_);
if (m_ == 1)
MakeMap(0, 1);
return;
}
memset(eo, 0, n_ * sizeof *eo);
int n = n_ - L - 2;
for (int h = 0; h < m_; h++) {
int i = ii[h], j = jj[h];
eo[i]++, eo[j]++;
}
for (int i = 0; i < n_; i++)
ej[i] = (int *) malloc((eo[i] + 1) * sizeof *ej[i]), eo[i] = 0;
for (int h = 0; h < m_; h++) {
int i = ii[h], j = jj[h];
ej[i][eo[i]++] = j, ej[j][eo[j]++] = i;
}
memset(type, 0, n_ * sizeof *type);
int u;
for (u = 0; u < n_; u++)
if (eo[u] == 2) {
int v = ej[u][0], w = ej[u][1], tmp;
if (eo[v] < eo[w])
tmp = v, v = w, w = tmp;
for (int o = eo[v]; o--; ) {
int x = ej[v][o];
if (x != u)
type[x] = 1;
}
type[u] = -1;
u = w;
break;
}
for (int l = L - 1; l >= 0; l--) {
int w = -1;
for (int o = eo[u]; o--; ) {
int v = ej[u][o];
if (type[v] == 1)
bb[v] |= 1 << l;
else if (type[v] == 0)
w = v;
}
type[u] = -1;
u = w;
}
for (int b = 0, i = 0; i + 1 < n; b++)
if ((b & b - 1) != 0)
pp[b] = i++;
pp[(1 << L) - 1] = n - 1;
int m = 0;
for (int h = 0; h < m_; h++) {
int i = ii[h], j = jj[h];
if (type[i] == 1 && type[j] == 1)
m++;
}
InitMap(n, m);
for (int h = 0; h < m_; h++) {
int i = ii[h], j = jj[h];
if (type[i] == 1 && type[j] == 1)
MakeMap(pp[bb[i]], pp[bb[j]]);
}
}
Compilation message (stderr)
Alice.cpp: In function 'void Alice(int, int, int*, int*)':
Alice.cpp:17:14: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
17 | if ((b & b - 1) != 0)
| ~~^~~
Bob.cpp: In function 'void Bob(int, int, int*, int*)':
Bob.cpp:59:14: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
59 | if ((b & b - 1) != 0)
| ~~^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |