#include "simurgh.h"
#include <bits/stdc++.h>
#define maxn 505
#define fi first
#define se second
using namespace std;
using ii = pair<int, int>;
vector<int> adj[maxn];
vector<int> find_roads(int n, vector<int> u, vector<int> v) {
int m = u.size();
vector<int> cl(m+1, 0);
for (int i = 0; i < m; i++) {
adj[u[i]].emplace_back(i);
adj[v[i]].emplace_back(i);
}
for (int o = 0; o < n; o++) {
vector<int> indice;
if (1) {
vector<int> par(n);
iota(par.begin(), par.end(), 0);
function<int(int)> find_set = [&](int v) {
return par[v] == v ? v : par[v] = find_set(par[v]);
};
for (int i = 0; i < m; i++)
if (u[i] != o && v[i] != o && find_set(u[i]) != find_set(v[i])) {
par[find_set(u[i])] = find_set(v[i]);
indice.emplace_back(i);
}
}
vector<ii> nho;
int cnt = -1;
for (int i : adj[o]) {
if (cl[i] == 1) {
cnt = i;
continue;
}
indice.emplace_back(i);
nho.emplace_back(i, count_common_roads(indice));
indice.pop_back();
}
// for (auto [u, v] : nho) cout << u << ' ' << v << "\n";
// cout << "----------------\n";
int mx = 0, dif = 0;
for (auto [u, v] : nho) mx = max(mx, v);
for (auto [u, v] : nho)
if (mx != v) {dif = 1; break;}
if (dif) {
for (auto [u, v] : nho) if (v == mx) cl[u] = 1;
continue;
}
if (cnt == -1) {
for (auto [u, v] : nho) cl[u] = 1;
continue;
}
indice.emplace_back(cnt);
int T = count_common_roads(indice);
assert(mx != T);
for (auto [u, v] : nho) if (v == T) cl[u] = 1;
}
vector<int> ans;
for (int i = 0; i < m; i++) if (cl[i]) ans.emplace_back(i);
return ans;
}
/*
4 6
0 1
0 2
0 3
1 2
1 3
2 3
0 1 5
*/
# | 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... |