제출 #566581

#제출 시각아이디문제언어결과실행 시간메모리
566581lorenzoferrariSimurgh (IOI17_simurgh)C++17
0 / 100
1 ms212 KiB
#include <bits/stdc++.h> #include "simurgh.h" using namespace std; int count_common_roads(const vector<int>& r); vector<int> find_roads(int n, vector<int> u, vector<int> v) { int m = u.size(); vector<vector<int>> adj(n); for (int i = 0; i < m; ++i) { adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } vector<int> p(n); auto find = [&](auto&& self, int i) -> int { return p[i] == i ? i : p[i] = self(self, p[i]); }; auto onion = [&](int a, int b) -> bool { a = find(find,a); b = find(find,b); if (a == b) return false; p[a] = b; return true; }; vector<int> ans; vector<int> st; auto cycle = [&]() -> bool { vector<vector<int>> g(n); for (int i = 0; i < n; ++i) p[i] = n; for (int i : st) { if (!onion(u[i], v[i])) { return false; } } return true; }; auto generate = [&](auto&& self, int i) -> void { if (cycle()) return; if (int(st.size()) == n-1) { if (count_common_roads(st) == n-1) ans = st; return; } if (i == m) return; st.push_back(i); self(self, i+1); st.pop_back(); self(self, i+1); }; generate(generate, 0); return ans; }
#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...