#include "Alicelib.h"
#include <cassert>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
void Alice(int N, int M, int A[], int B[]) {
int cnt = 0;
InitG(2 * N + 3, M + ((N * (N + 3) / 2) + 2));
//0 -> N-1
for (int i = 0; i < M; i++) {
MakeG(cnt++, A[i], B[i]);
}
//N -> 2*N-1
for (int i = N, tmp = 0; i < 2 * N; tmp++, i++) {
MakeG(cnt++, i, 2 * N);
for (int j = 0; j <= tmp; j++) {
MakeG(cnt++, i, j);
}
}
//2*N
MakeG(cnt++, 2 * N, 2 * N + 1);
MakeG(cnt++, 2 * N, 2 * N + 2);
}
#include "Boblib.h"
#include <cassert>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
void Bob(int V, int U, int C[], int D[]) {
int n = (V - 3) / 2;
int m = U - (n * (n + 3) / 2) - 2;
int spc = -1;
vector<set<int>> adj(V);
vector<bool> used(V, false);
vector<int> occ(V, 0);
map<int, int> mp;
InitMap(n, m);
//adj
for (int i = 0; i < U; i++) {
adj[C[i]].insert(D[i]);
adj[D[i]].insert(C[i]);
occ[C[i]]++;
occ[D[i]]++;
}
//spc (2*N)
for (int i = 0; i < V; ++i) {
int cnt = 0;
for (auto &elt: adj[i]) {
if (occ[elt] == 1)
cnt++;
}
if (cnt == 2) {
spc = i;
used[i] = true;
}
}
//N -> 2*N-1
for (int sz = 2; sz <= n + 1; ++sz) {
for (int i = 0; i < V; ++i) {
if (adj[i].count(spc) && adj[i].size() == sz) {
int x = -1;
for (auto &elt: adj[i]) {
if (!used[elt])
x = elt;
}
mp[x] = sz - 2;
used[x] = true;
}
}
}
//ans
for (int i = 0; i < U; i++) {
if (mp.count(C[i]) && mp.count(D[i])) {
MakeMap(mp[C[i]], mp[D[i]]);
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |