#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) == 0) 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;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
WA in grader: NO |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
WA in grader: NO |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
WA in grader: NO |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
300 KB |
WA in grader: NO |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
WA in grader: NO |
2 |
Halted |
0 ms |
0 KB |
- |