#include <bits/stdc++.h>
#define ll long long
#define sz(x) int(x.size())
#define all(x) x.begin(), x.end()
#define pb push_back
#define mp make_pair
#define fr first
#define se second
using namespace std;
const int MAXN = 501;
ll grafo[MAXN][MAXN], pos[MAXN][MAXN], un[MAXN][MAXN], tim = 1, vis[MAXN];
int count_common_roads(const vector<int> &r);
ll N;
ll dfs(ll nod)
{
vis[nod] = tim;
ll cant = 1;
for (ll i = 0; i < N; i++)
{
if (un[nod][i] == tim && vis[i] != tim)
cant += dfs(i);
}
return cant;
}
std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v)
{
N = n;
ll i, cant = 0, j, ma, pad, act;
vector<pair<ll, ll>> inp;
for (i = 0; i < sz(u); i++)
{
grafo[u[i]][v[i]] = i;
grafo[v[i]][u[i]] = i;
pos[u[i]][v[i]] = 1;
pos[v[i]][u[i]] = 1;
inp.pb({u[i], v[i]});
}
vector<int> ord;
for (i = 0; i < n; i++)
ord.pb(i);
reverse(all(ord));
do
{
vector<int> ars;
bool con = 0, pu;
for (i = 0; i < sz(ord) - 1; i++)
{
if (pos[ord[i]][ord[i + 1]] == 0)
{
pu = 0;
for (j = 0; j < i; j++)
{
if (pos[ord[j]][ord[i + 1]])
{
ars.pb(grafo[ord[j]][ord[i + 1]]);
pu = 1;
break;
}
}
if (pu == 0)
{
con = 1;
break;
}
}
else
ars.pb(grafo[ord[i]][ord[i + 1]]);
}
if (con)
continue;
cant = count_common_roads(ars);
tim++;
if (cant == sz(ars))
return ars;
for (i = 1; i < sz(ord); i++)
{
ma = cant;
pad = ord[i - 1];
for (j = 0; j < i - 1; j++)
{
if (pos[ord[i]][ord[j]])
{
ars[i - 1] = grafo[ord[i]][ord[j]];
}
act = count_common_roads(ars);
tim++;
if (act == sz(ars))
return ars;
if (ma < act)
{
ma = act;
pad = ord[j];
}
}
cant = ma;
ars[i - 1] = grafo[pad][i];
}
} while (next_permutation(all(ord)));
return ord;
}
# | 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... |