# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1146725 | SpyrosAliv | Sphinx's Riddle (IOI24_sphinx) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<int>> g;
bool sim(int a, int b) { // checks if two adj nodes share color
vector<int> qr(n, n);
qr[a] = qr[b] = -1;
int cnt = perform_experiment(qr);
if (cnt == 3) return false;
if (g[a].size() == 1 && g[b].size() == 1) {
if (cnt == 1) return true;
else return false;
}
return true;
}
vector<int> solve3() {
int comps = 0;
vector<int> q;
vector<int> cols(n);
int currCol = 0;
for (int i = 0; i < n; i++) {
cols[i] = currCol;
if (i == n-1) break;
if (sim(i, i+1)) continue;
else currCol++;
}
return cols;
}
vector<int> solve12() {
return {-1};
}
vector<int> find_colours(int N, vector<int> X, vector<int> Y) {
n = N;
for (int i = 0; i < n; i++) {
g[X[i]].push_back(Y[i]);
g[Y[i]].push_back(X[i]);
}
if (n <= 50) return solve12();
else return solve3();
}