Untitled

 avatar
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