Pagini recente » Cod sursa (job #1800280) | Borderou de evaluare (job #886961) | Borderou de evaluare (job #1791058) | Borderou de evaluare (job #2574373) | Cod sursa (job #1692522)
#include <stdio.h>
#include <vector>
using namespace std;
const int MAX = 50000;
vector<int> v[MAX + 1];
bool viz[MAX + 1];
int s[MAX + 1], cate = 0;
int nr[MAX + 1];
void dfs(int nod)
{
viz[nod] = 1;
s[++cate] = nod;
for(int i = 0; i < v[nod].size(); i++)
{
nr[v[nod][i]]--;
if(viz[v[nod][i]] == 0 && nr[v[nod][i]] == 0)
dfs(v[nod][i]);
}
}
int main()
{
FILE *fin, *fout;
fin = fopen("sortaret.in", "r");
fout = fopen("sortaret.out", "w");
int n, m;
fscanf(fin, "%d%d", &n, &m);
for(int i = 1; i <= m; i++)
{
int x, y;
fscanf(fin, "%d%d", &x, &y);
v[x].push_back(y);
nr[y]++;
}
for(int i = 1; i <= n; i++)
if(viz[i] == 0 && nr[i] == 0)
dfs(i);
for(int i = 1; i <= cate; i++)
fprintf(fout, "%d ", s[i]);
return 0;
}