下午考试,存个档路上复习
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
bool toposort(vector<vector<int>>& edge, vector<int>& din, vector<int>& topo) {
queue<int> q;
for (int i = 1; i < din.size(); i++) {
if (din[i] == 0) {
q.push(i);
}
}
while (!q.empty()) {
int x = q.front();
q.pop();
topo.push_back(x);
for (auto y : edge[x]) {
din[y]--;
if (din[y] == 0) {
q.push(y);
}
}
}
return topo.size() == (din.size() - 1);
}
int main(void)
{
int n, m;
cin >> n >> m;
vector<vector<int>> edge(n + 1);
vector<int> din(n + 1);
vector<int> topo;
while (m--) {
int a, b;
cin >> a >> b;
edge[a].push_back(b);
din[b]++;
}
if (toposort(edge, din, topo)) {
for (auto x : topo) {
cout << x << " ";
}
}
else {
cout << "Cycle!" << endl;
}
return 0;
}