#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);
do
{
vector<int> ars;
bool con = 0;
for (i = 0; i < sz(ord) - 1; i++)
{
if (pos[ord[i]][ord[i + 1]] == 0)
{
con = 1;
break;
}
ars.pb(grafo[ord[i]][ord[i + 1]]);
un[ord[i]][ord[i + 1]] = tim;
un[ord[i + 1]][ord[i]] = tim;
}
if (dfs(ord[0]) == n)
cant = count_common_roads(ars);
tim++;
cant=0;
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]];
}
for(ll k=0; k<sz(ars); k++)
{
un[inp[ars[k]].fr][inp[ars[k]].se]=tim;
un[inp[ars[k]].se][inp[ars[k]].fr]=tim;
}
if (dfs(ord[0]) == n)
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... |