【題解】ZeroJudge a552: 模型

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=a552

credit: LiuWilliam

#include <bits/stdc++.h>

#define int long long
const int maxn = 105;
using namespace std;

vector <int> e[maxn];
vector <int> deg;
vector <int> ord;
set <int> st;

void TopoSort() {
    while (!st.empty()) {
        int u = *st.begin();  st.erase(st.begin());
        ord.push_back(u);
        for (int v : e[u]) {
            deg[v]--;
            if (deg[v] == 0) st.insert(v);
        }
    }
}

signed main() {
    ios_base::sync_with_stdio(0), cin.tie(0);

    int n, m;
    while (cin >> n >> m) {
        deg.resize(n);
        
        for (int i = 0; i < m; i++) {
            int u, v;  cin >> u >> v;
            e[u].push_back(v);
            deg[v]++;
        }
        for (int i = 0; i < n; i++) {
            if (deg[i] == 0) st.insert(i);
        }
        TopoSort();
        for (int i : ord) {
            cout << i << ' ';
        }
        cout << endl;

        ord.clear();
        memset(e, 0, sizeof(e));
    }

    return 0;
}
分享本文 Share with friends