Pagini recente » Cod sursa (job #1000378) | Cod sursa (job #3194678) | Cod sursa (job #2254305) | Cod sursa (job #2698820) | Cod sursa (job #1841017)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>
#define nrmax 100001
using namespace std;
ifstream f("sortaret.in");
ofstream g("sortaret.out");
bool used[nrmax];
int st[nrmax];
int n , m , x, y , k , nr;
vector < int > G[nrmax];
vector < int > T[nrmax];
vector < int > ::iterator j;
vector < int > sol[nrmax];
void dfs ( int i )
{
used[i] = 1;
for (vector < int > ::iterator j = G[i].begin(); j != G[i].end(); j++)
{
if ( !used[ (*j) ] )
dfs( (*j) );
}
st[++k] = i;
}
void dfsT ( int i )
{
sol[nr].push_back(i);
used[i] = 1;
for (vector < int > ::iterator j = T[i].begin() ; j != T[i].end(); j++ )
{
if ( !used [ (*j) ] )
dfsT ( (*j) ) ;
}
}
int main()
{
f >> n >> m;
for ( ; m-- ; )
{
f >> x >> y;
G[x].push_back(y);
T[y].push_back(x);
}
for ( int i = 1; i <= n ; i++ )
{
if ( !used[i] ) dfs(i);
}
/* memset(used,false,sizeof used);
for ( int i = k ; i >= 1; i-- )
{
if ( !used[ st[i] ] )
{
nr++;
dfsT(st[i]);
}
}
g << nr << "\n" ;
for ( int i = 1; i <= nr; i++ )
{
for ( vector < int > ::iterator j = sol[i].begin(); j != sol[i].end(); j++ )
g << (*j) << " " ;
g << "\n" ;
} */
for ( int k = n; k >= 1 ; k-- )
g << st[k] << " " ;
return 0;
}