#include "sphinx.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
using vi = vector<int>;
using vl = vector<ll>;
using vvi = vector<vi>;
using vvl = vector<vl>;
void trace_vec(vi &inp) {
for (auto &el : inp) cout << el << " ";
cout << "\n";
}
int N, M;
vector<set<int>> adj;
vi G;
int queryTwo(int a, int b, int colourA, int colourB) {
vi E(N, N);
E[a] = colourA;
E[b] = colourB;
return perform_experiment(E);
}
void findColour(int a) {
if (G[a] != -1) return;
int neighbour = *adj[a].begin();
int b2 = queryTwo(a, neighbour, 0, 0);
int baseline = queryTwo(a, neighbour, -1, -1);
bool same = baseline == b2;
for (int colour = 0; colour < N; colour++) {
int x1 = queryTwo(a, neighbour, colour, -1);
int x2 = queryTwo(a, neighbour, -1, colour);
if (same && b2 == x1) {
G[a] = G[neighbour] = colour;
return;
}
if (!same && x1 == b2) {
G[neighbour] = colour;
}
if (!same && x2 == b2) {
G[a] = colour;
}
}
}
void findFrom(int a, int b) {
if (G[a] == -1) return;
if (G[b] != -1) return;
if (adj[a].count(b) == 0) return;
int baseline = queryTwo(a, b, -1, -1);
for (int colour = 0; colour < N; colour++) {
int x = queryTwo(a, b, colour, -1);
if (x < baseline) {
G[b] = colour;
break;
} else if (x > baseline) {
G[b] = G[a];
break;
}
}
}
vi find_colours(int _N, vi X, vi Y) {
N = _N, M = (int) X.size();
adj.assign(N, set<int>());
for (int i = 0; i < M; i++) {
adj[X[i]].insert(Y[i]);
adj[Y[i]].insert(X[i]);
}
G.assign(N, -1);
if (N == 2) { // 3/100 pts
findColour(0);
return G;
} else if (N <= 50) {
set<int> vis;
queue<int> q;
q.push(0);
findColour(0);
while (!q.empty()) {
int cur = q.front();
q.pop();
// cout << "visited " << cur << "\n";
vis.insert(cur);
for (int v : adj[cur]) {
if (vis.count(v)) continue;
findFrom(cur, v);
q.push(v);
}
// cout << "colour is: " << G[cur] << "\n";
}
return G;
}
return G;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |