AC

许诺  •  27天前


#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int main() {

int N;
cin >> N;
vector<vector<int>> adj(N + 1);
vector<int> in_degree(N + 1, 0);

for (int i = 1; i <= N; ++i) {
    int child;
    while (cin >> child) {
        if (child == 0) break;
        adj[i].push_back(child);
        in_degree[child]++;
    }
}

queue<int> q;
for (int i = 1; i <= N; ++i) {
    if (in_degree[i] == 0) {
        q.push(i);
    }
}

vector<int> result;
while (!q.empty()) {
    int u = q.front();
    q.pop();
    result.push_back(u);

    for (int v : adj[u]) {
        in_degree[v]--;
        if (in_degree[v] == 0) {
            q.push(v);
        }
    }
}

for (int i = 0; i < result.size(); ++i) {
    if (i != 0) cout << " ";
    cout << result[i];
}
cout << endl;

return 0;

}


评论:

请先登录,才能进行评论