Pagini recente » Cod sursa (job #828263) | Cod sursa (job #324428) | Cod sursa (job #2213412) | Cod sursa (job #2007975) | Cod sursa (job #185513)
Cod sursa(job #185513)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int N = 50000;
int n,m;
vector<int> g[N];
int grad[N];
bool used[N];
void sortare_topologica ( vector<int> &sortt ) {
queue<int> q;
for (int i = 0; i < n; ++i)
if (grad[i] == 0)
q.push(i);
for (; !q.empty(); q.pop()) {
sortt.push_back(q.front());
used[q.front()] = true;
for (vector<int>::iterator next = g[q.front()].begin(); next != g[q.front()].end(); ++next) {
--grad[*next];
if (grad[*next] == 0)
q.push(*next);
}
}
}
int main() {
freopen("sortaret.in","rt",stdin);
freopen("sortaret.out","wt",stdout);
scanf("%d %d",&n,&m);
for (int i = 0; i < m; ++i) {
int a,b;
scanf("%d %d",&a,&b);
--a; --b;
g[a].push_back(b);
++grad[b];
}
vector<int> sortt;
sortare_topologica(sortt);
for (int i = 0; i < n; ++i) printf("%d ",sortt[i]+1);
printf("\n");
}