Untitled
unknown
plain_text
10 months ago
1.8 kB
3
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