Pagini recente » Cod sursa (job #2813018) | Cod sursa (job #2794781) | Cod sursa (job #1504738) | Cod sursa (job #1405909) | Cod sursa (job #3033315)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
#define FILE "sortaret"
ifstream in(FILE".in");
ofstream out(FILE".out");
#define N 50050
#define M 100100
struct el {
int vf, urm;
};
el g[2 * M];
int lst[N], nrp[N];
int nr;
void adauga(int u, int v) {
g[++nr].vf = v;
g[nr].urm = lst[u];
lst[u] = nr;
nrp[v]++;
}
//parcurgere for(int p = lst[u]; p != 0; p = g[p].urm) { int v = v[p].vf; }
queue<int> q;
vector<int> topo;
void bfs() {
while(!q.empty()) {
int u = q.front();
q.pop();
for(int p = lst[u]; p != 0; p = g[p].urm) {
int v = g[p].vf;
if(--nrp[v] == 0) {
topo.push_back(v);
q.push(v);
}
}
}
}
int main() {
int n, m;
in >> n >> m;
for(int i = 1; i <= m; i++) {
int u, v;
in >> u >> v;
adauga(u, v);
}
for(int i = 1; i <= n; i++) {
if(nrp[i] == 0) {
q.push(i);
topo.push_back(i);
}
}
bfs();
for(auto nod : topo)
out << nod << ' ';
}