#include <bits/stdc++.h>
#include "sphinx.h"
using namespace std;
template <typename T>
using v = vector<T>;
using pii = pair<int, int>;
using ll = long long;
#define rep(i, k, n) for (int i = k; i < n; i++)
int cnt;
v<bool> vis;
v<v<int>> adj;
void dfs(int n, int u, v<int> &neg) {
vis[n] = true;
for (auto x : adj[n]) {
if (!vis[x] && neg[x] == neg[n] && x != u) dfs(x, u, neg);
}
}
int bs(int u, int am, v<int> &cmp) {
int l = 0, r = am-1;
int ans;
int n = cmp.size();
while (l <= r) {
map<int, int> mp;
int m = (l+r)/2;
rep(i, 0, m) {
mp[i]++;
}
v<int> query = cmp;
rep(i, 0, n) {
if (mp.count(cmp[i]) || cmp[i] == -2) query[i] = n;
else query[i] = -1;
}
query[u] = -1;
cnt = 0;
vis.assign(n, false);
rep(i, 0, n) {
if (query[i] == n && vis[i] == false) {
cnt++;
dfs(i, u, query);
}
}
int coloured = am-(m);
int compon = perform_experiment(query);
if (compon == cnt+coloured) {
ans = m;
l = m+1;
}
else {
r = m-1;
}
}
return ans;
}
int count(v<int> &query, int u) {
int n = query.size();
vis.assign(n, false);
cnt = 0;
rep(i, 0, n) {
if (vis[i] == false && query[i] == n) {
//if (u == 8) cout << i << " " << cnt << endl;
cnt++;
dfs(i, u, query);
}
}
return cnt;
}
v<int> find_colours(int N, v<int> X, v<int> Y) {
int n = N;
v<int> trees;
int id = 0;
v<int> cmp(n, -2);
cmp[0] = 0;
id++;
adj.resize(n);
int m = X.size();
rep(i, 0, m) {
int a = X[i], b = Y[i];
adj[a].push_back(b);
adj[b].push_back(a);
}
rep(i, 1, n) {
cmp[i] = -1;
v<int> query = cmp;
rep(j, 0, n) {
if (cmp[j] == -2) query[j] = n;
else query[j] = -1;
}
query[i] = -1;
int comp = count(query, i);
//if (i == 8) for (auto x : query) cout << x << endl;
int ans = perform_experiment(query);
//cout << comp << " " << ans << endl;
if (ans == comp + id) {
cmp[i] = bs(i, id, cmp);
}
else {
cmp[i] = id;
id++;
}
}
return cmp;
}
# | 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... |