제출 #1124785

#제출 시각아이디문제언어결과실행 시간메모리
1124785Mousa_Aboubaker스핑크스 (IOI24_sphinx)C++20
0 / 100
0 ms416 KiB
#include "sphinx.h" #include <bits/stdc++.h> using namespace std; vector<int> find_colours(int N, vector<int> X, vector<int> Y) { int n = N, m = (int)X.size(); vector<int> x = X, y = Y; vector<int> par(n), sz(n, 1); iota(par.begin(), par.end(), 0); auto find = [&](auto self, int u) -> int { return par[u] = (par[u] == u ? u : self(self, par[u])); }; auto unite = [&](int u, int v) -> bool { u = find(find, u); v = find(find, v); if(u == v) return false; if(sz[u] > sz[v]) swap(u, v); sz[v] += sz[u]; par[u] = v; return true; }; vector adj(n, vector<int>()); for(int i = 0; i < m; i++) { adj[x[i]].push_back(y[i]); adj[y[i]].push_back(x[i]); } vector<bool> vis(n, false); vector<int> e(n, n); vector<int> res(n, 0); int curr = -1; int cnt = 1; int lst = 0; auto dfs = [&](auto self, int u) -> void { vis[u] = true; e[u] = -1; int x = perform_experiment(e); if(x == cnt) { res[u] = curr; unite(lst, u); } else { res[u] = ++curr; cnt++; } for(auto i: adj[u]) { if(vis[i]) continue; lst = u; self(self, i); } }; dfs(dfs, 0); return res; /*for(int i = 0; i < n; i++) { e.assign(n, -1); for(int j = 0; j < n; j++) { for(int k = 0; k < n; k++) { if(k == i) continue; e[k] = j; } int m = perform_experiment(e); if(m == 1) { res[i] = j; break; } } } return res;*/ }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...