Untitled
unknown
plain_text
a year ago
1.8 kB
6
Indexable
#include <iostream>
using namespace std;
int n, m;
const int MN = 150;
int adj[MN][MN];
int color[MN];
int trace[MN];
int min_tmp[MN];
int size_min_tmp = 0;
int min_sav[MN];
int size_min_sav;
int min_sum = (int)1e9;
void dfs(int u) {
color[u] = 1;
for (int v = 1; v <= n; ++v) {
if (adj[u][v]) {
if (color[v] == 0) {
trace[v] = u;
dfs(v);
}
else {
size_min_tmp = 0;
min_tmp[size_min_tmp++] = u;
int t = u;
int s = u;
while (t != v) {
t = trace[t];
s += t;
min_tmp[size_min_tmp++] = t;
}
if (s < min_sum) {
size_min_sav = size_min_tmp;
for (int i = 0; i < size_min_tmp; ++i) {
min_sav[i] = min_tmp[i];
}
min_sum = s;
}
}
}
}
color[u] = 0;
}
void sort(int a[], int sz) {
int n = sz;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
if (a[i] > a[j]) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
}
int main()
{
cin >> n >> m;
for (int i = 0; i < m; ++i) {
int u, v;
cin >> u >> v;
adj[u][v] = 1;
}
for (int i = 0; i < n; ++i) {
dfs(i);
}
sort(min_sav, size_min_sav);
for (int i = 0; i < size_min_sav; ++i) {
cout << min_sav[i] << ' ';
}
return 0;
}Editor is loading...
Leave a Comment