Uva 10305 Ordering Tasks(拓扑排序)

题目链接:https://vjudge.net/problem/UVA-10305

相似题目:CF1385E完 全 一 致

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, m;
    while (cin >> n >> m and (n or m)) {
        vector<int> G[n];
        int deg[n] = {};
        for (int i = 0; i < m; ++i) {
            int u, v; cin >> u >> v;
            --u, --v;
            G[u].push_back(v);
            ++deg[v];
        }
        queue<int> que;
        for (int i = 0; i < n; i++) {
            if (deg[i] == 0) {
                que.push(i);
            }
        }
        vector<int> res;
        while (!que.empty()) {
            int u = que.front();
            que.pop();
            res.push_back(u);
            for (auto v : G[u]) {
                if (--deg[v] == 0) {
                    que.push(v);
                }
            }
        }
        for (int i = 0; i < res.size(); ++i) {
            cout << res[i] + 1 << " \n"[i == res.size() - 1];
        }
    }
}

 

posted @ 2020-07-21 22:02  Kanoon  阅读(137)  评论(0)    收藏  举报